Как игнорировать операторы импорта при тестировании Jest? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь написать тест для заводского модуля. Этот фабричный модуль импортирует объектный модуль, который затем возвращает новый экземпляр заданной строки 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...