Я пытаюсь протестировать некоторый код, написанный на Typescript, и мои тесты не выполняются. Я немного упростил код, чтобы разбить мою проблему. Я новичок в ts / js, поэтому, скорее всего, я просто упускаю что-то очевидное ..
У меня нет классов, определенных в традиционном смысле, где вы можете создать новый объект. У меня просто есть два машинописных файла, в которых определены функции. По некоторым причинам мой тест не пройден, когда функция, которую я ожидаю вызвать, является локальной для функции, которую я вызываю.
Ниже приведены два различных примера и их результаты.
Мой вызывающий Функция callFoo()
находится в моем moduleUnderTest
файле. Когда callFoo()
вызывает foo()
в другом файле, мой тестовый пример проходит.
файл moduleUnderTest (где foo()
происходит из вспомогательного файла)
import { foo } from "path/to/helper/methods";
export function callFoo() {
foo();
}
вспомогательный метод
export function foo() {
console.log("Foo was called");
}
и вот мой тестовый код
import { callFoo } from "path/to/module/under/test";
import * as helperMethods from "path/to/helper/methods";
chai.use(spies);
const expect = chai.expect;
suite("Testing Foo", () => {
test("foo", async () => {
const spy = chai.spy.on(helperMethods, "foo");
await callFoo();
expect(spy).to.have.been.called();
});
});
Вывод (успех)
Однако, если я переместу foo()
в тот же файл moduleUnderTest
и проведу тот же самый точный тест, он не пройдёт.
export function callFoo() {
foo();
}
export function foo() {
console.log("local foo was called");
}
Тестовый класс
import { callFoo } from "path/to/module/under/test";
import * as moduleUnderTest from "path/to/module/under/test";
chai.use(spies);
const expect = chai.expect;
suite("Testing Foo", () => {
test("foo", async () => {
const spy = chai.spy.on(moduleUnderTest, "foo");
await callFoo();
expect(spy).to.have.been.called();
});
});
Выход (отказ)
Таким образом, вы можете увидеть на выходе метод был назван
локальный foo был назван
, но expect().to.have.been.called()
не работает. Это почему? Чего мне не хватает?