Переход с Jest
Большинство наборов тестов Jest можно перенести на deno test без переписывания логики тестов: модуль node:test предоставляет ту же структуру describe/it, а стандартная библиотека включает expect с уже используемыми вами сопоставителями. Меняется лишь несколько импортов и способ настройки запуска тестов.
Тот же тест в Deno
Для типичного теста Jest достаточно добавить новые импорты:
import { beforeEach, describe, it } from "node:test";
import { expect, fn } from "jsr:@std/expect";
describe("shopping cart", () => {
let cart: string[];
beforeEach(() => {
cart = [];
});
it("starts empty", () => {
expect(cart).toHaveLength(0);
});
it("notifies a listener", () => {
const onAdd = fn();
cart.push("apple");
onAdd(cart.length);
expect(onAdd).toHaveBeenCalledWith(1);
});
});
$ deno test cart.test.ts
ok | 1 passed (2 steps) | 0 failed (13ms)
В отличие от Jest, ничего не внедряется в глобальную область видимости: describe, it, expect и хуки импортируются явно, поэтому в каждом файле указано, что именно он использует. Тесты, написанные для node:test, также продолжают работать в самой среде Node.js.
Что чему соответствует
| Jest | Deno |
|---|---|
describe, it, beforeEach, … |
node:test (или @std/testing/bdd) |
сопоставители expect(...) | jsr:@std/expect |
jest.fn() |
fn() из jsr:@std/expect
|
jest.spyOn(obj, "m") | spy/stub из @std/testing/mock |
toMatchSnapshot() | assertSnapshot |
jest.useFakeTimers() | FakeTime |
npx jest | deno test |
npx jest --watch | deno test --watch |
npx jest -t "name" | deno test --filter "name" |
Перенос настроек
Большая часть конфигурации Jest больше не нужна: TypeScript, JSX и ES-модули работают без преобразований, поэтому у параметров ts-jest, babel-jest и transform нет соответствующих настроек для переноса. Выбор файлов задаётся в deno.json:
{
"test": {
"include": ["src/**/*.test.ts"],
"exclude": ["src/fixtures/"]
}
}
Моки модулей
В Deno нет аналога jest.mock("./module"), поскольку записи модулей неизменяемы. Тесты, использующие эту функцию, можно перенести одним из следующих способов:
- внедрение зависимостей: передайте зависимый объект и предоставьте тесту шпион или заглушку,
- подмена объекта, предоставляемого модулем, с помощью
stubиз@std/testing/mock.
Обычно это единственная часть миграции, для которой требуется изменить тестируемый код.
Оставьте пакеты npm там, где это удобно
Вспомогательные инструменты для тестирования из npm продолжают работать через спецификаторы npm:, например npm:@testing-library/dom для проверок DOM (см. раздел Использование Testing Library с Deno). Перенести нужно только сам запуск тестов.
Флаги запуска, репортёры и покрытие кода описаны в справочнике по deno test.
Последнее обновление:
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/test/migrate_from_jest