Я пытаюсь написать тест для заводского модуля. Этот фабричный модуль импортирует объектный модуль, который затем возвращает новый экземпляр заданной строки c. Объект, который он импортирует, импортирует больше вещей, и одна из вещей, которые он импортирует, импортирует другую вещь, которая импортирует другой скрипт, который зависит от некоторых переменных среды. Этот сценарий запускается, не может найти необходимые переменные окружения и убивает процесс до того, как тест будет запущен.
Я не считаю необходимым импортировать так много слоев, чтобы проверить эту спецификацию. c фабрика. Какой правильный подход для решения этой проблемы? Обратите внимание, что я очень плохо знаком с javascript / typescript, поэтому любое понимание того, как должен работать импорт пакетов, будет полезно.
jest.mock не препятствует выполнению операторов импорта на базовом объекте.
//object-factory.ts
import {AnObject} from '../interfaces/an-object';
import VeryNiceObject from './very-nice-object';
export const VERY_NICE_STRING = 'this-string-is-very-nice'
export class ObjectFactory {
private readonly str: string;
constructor(str: string) {
this.str = str;
}
public build(): AnObject {
switch (this.str) {
case VERY_NICE_STRING:
return new VeryNiceObject();
default:
throw new Error(`Unknown string ${this.str}`);
}
}
}
Я пытаюсь изолировать этот тестируемый модуль. Мой тест выглядит так -
jest.mock("../very-nice-object")
import {AnObject} from "../../interfaces/an-object";
import {ObjectFactory, VERY_NICE_STRING} from "../object-factory"; //FAILS HERE
import VeryNiceObject from "../very-nice-object";
describe('object-factory', () => {
test("build returns VeryNiceObject", () => {
const factory = new ConsumerGroupFactory(VERY_NICE_STRING)
const objectResult = factory.build()
expect(objectResult instanceof VeryNiceObject)
})
});
Я также попытался запустить с автоматическим включением в верхней части файла, и он не прошел по другой причине.
jest.autoMockOn()
...rest of test
● Test suite failed to run
TypeError: Expected a string
at escapeStringRegexp (node_modules/colors/lib/colors.js:80:11)
at node_modules/colors/lib/colors.js:101:18
at Array.forEach (<anonymous>)
at node_modules/colors/lib/colors.js:99:27
at Object.<anonymous> (node_modules/colors/lib/colors.js:109:3)