Я пытаюсь написать модульный тест для Node.js логики проекта c, используя Jest. Тем не менее, большинство документов обеспечивают только случай для импорта модуля или класса, однако в моем случае мой модуль содержит только функции.
На данный момент я знаю, что в Jest есть в основном три способа тестирования функции:
1) jest.fn()
2) jest.spyOn
3) jest.mock('path')
Я пробовал все три, но ни одна из них не работает.
Я хотел проверить, возвращает ли функция правильное значение (строку) при вызове. Я пробовал много разных
Вот мой код: (я покажу короткие фрагменты моего кода в последующих частях)
getDefApCode.ts
export function getDefApCode(code: string) {
switch (code) {
case 'BKK':
return 'NRT'
case 'CTX':
return 'ICN'
case 'SIN':
return 'TPE'
default:
return code
}
}
export function getDefaultDepartureCode(code: string) {
return code ? getDefaultLocationCode(code) : 'LHR'
}
export function getDefaultDestinationCode(code: string) {
return code ? getDefaultLocationCode(code) : 'ZRH'
}
getDefAPCode.spe c .ts >> Шаблон 1 (с использованием обязательного + jest.fn)
import { Connection, getConnection, getConnectionOptions } from "typeorm";
import { bootstrap, dbConnection } from "../../../src/app";
import { TourSearchParamsFactory } from "../../helpers/typeOrmFactory";
import * as getDefAPCode from "../../../src/controllers/logic/getDefAPCode";
describe("Logic Test", () => {
beforeAll(async () => {
await dbConnection(15, 3000);
});
afterAll(async () => {
const conn = getConnection();
await conn.close();
});
it("should get a default location code", async () => {
const getLocation = require('../../../src/controllers/logic/getDefAPCode');
const code = jest.fn(code => 'BKK');
const getCode = getLocation(code);
expect(getCode).toHaveBeenCalled();
});
});
Сообщение об ошибке:
TypeError: getLocation is not a function
getDefAPCode.spe c .ts >> Шаблон 2 (с использованием spyON)
import { Connection, getConnection, getConnectionOptions } from "typeorm";
import { bootstrap, dbConnection } from "../../../src/app";
import { TourSearchParamsFactory } from "../../helpers/typeOrmFactory";
import * as getDefaultLocationCode from "../../../src/controllers/logic/getDefaultLocationCode";
describe("Logic Test", () => {
beforeAll(async () => {
await dbConnection(15, 3000);
});
afterAll(async () => {
const conn = getConnection();
await conn.close();
});
const { getDefaultLocationCode, getDefaultDepartureCode, getDefaultDestinationCode } = require('../../../src/controllers/logic/getDefaultLocationCode');
it("should get a default location code", async () => {
const spy = jest.spyOn(getDefaultLocationCode, 'getDefaultLocationCode');
getDefaultLocationCode.getDefaultLocationCode('AKJ');
expect(spy).toHaveBeenCalled();
});
});
Это некоторые сообщения об ошибках, которые появляются, когда я пробовал другой шаблон (я не отслеживал все шаблоны тестового кода, добавлю шаблон тестового кода, как только я исправлено docker)
Сообщение об ошибке:
Cannot spy the getDefaultLocationCode property because it is not a function; undefined given instead
31 | const spy = jest.spyOn (getDefaultLocationCode, 'getDefaultLocationCode');
Прошлые сообщения об ошибках
error TS2349: This expression is not callable.
Type 'typeof import("/app/src/controllers/logic/getDefAPCode")' has no call signatures.
еще одно
expect(received).toHaveBeenCalled()
Matcher error: received value must be a mock or spy function
Received has type: string
Received has value: "NRT"