Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/workflows/nodeci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ jobs:

- name: Install
run: make install
# Сборка фронтенда проверяется в CI: у заготовки нет тестов, и поломанный
# импорт или отсутствующая зависимость иначе доедут до студента.
# Сборка фронтенда проверяется в CI: поломанный импорт или отсутствующая
# зависимость иначе доедут до студента.
- name: Build frontend
run: make build
- name: Run tests
run: make test
- name: Run linter
run: make lint
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ start-frontend:
develop:
make start-backend & make start-frontend

# Смоук проверяет контракт точки входа: проверка проекта зовёт init со своим
# сокетом и рендерит то, что он вернул.
test:
npm run --silent test

lint:
npm run --silent lint
npm run --silent format:check
Expand Down
21 changes: 21 additions & 0 deletions __tests__/smoke.test.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { describe, expect, test, vi } from "vitest";
import { renderToString } from "react-dom/server";

import init from "../src/init.jsx";

// Заготовку копирует студент, а проверка проекта входит в приложение через
// init: зовёт его со своим сокетом и рендерит то, что он вернул. Тест повторяет
// тот же путь, поэтому сломанный контракт виден здесь, а не в репозитории
// студента, где он выглядит как ошибка студента.
describe("точка входа", () => {
test("init принимает сокет и возвращает разметку", async () => {
const socket = { on: vi.fn() };

const markup = renderToString(await init(socket));

expect(markup).toContain("Hexlet Chat");
// Подписка на события проверяется затем, что сокет уже был параметром,
// который init игнорировал: снаружи это выглядело работающим.
expect(socket.on).toHaveBeenCalled();
});
});
Loading