Мое приложение использует службу, которая возвращает обещание, которое обычно зависит от целой группы других обещаний. Я реорганизовал это в отдельные именованные функции, чтобы упростить тестирование (и читаемость). Поэтому в этом случае я просто хочу проверить, что функция запуска выполняет свою работу и вызывает другие функции.Функция вызывается после того, как обещание разрешено, но Жасмин не проходит тест. Зачем?
например.
run() {
return myService
.connection
.then(this.namedFunction1)
.then(this.namedFunction2)
.then(this.namedFunction3)
.catch((error) => {
console.log("doh!", error.stack);
});
Когда я проверить, что namedFunction1 был назван Жасмин выходит из строя, даже если это не так. Вот небольшой пример кода, я сделал, чтобы держать вещи простыми:
getString() {
return Promise.resolve("Heeeelp. Heeeelp!!");
}
printToConsole(string) {
console.log(string); // This works! but Jasmine says nay :(
}
myFunction() {
this.getString()
.then(this.printToConsole)
.catch((error) => {
console.log("Some error occurred", error);
});
}
... и тест:
it("should call the printToConsole function", function() {
spyOn(myClass, "printToConsole").and.callThrough(); //added the call through so it would print
myClass.myFunction();
expect(myClass.printToConsole).toHaveBeenCalled();
});
и выход ...
> Started F[2016-05-16 11:32:31.898] console - Heeeelp. Heeeelp!!
>
>
> Failures: 1) MyClass myFunction should call the printToConsole
> function Message:
> Expected spy printToConsole to have been called. Stack:
> Error: Expected spy printToConsole to have been called.
Я я попробовал добавить функцию jasmine asynch done(), но это ничего не делало, и в конечном итоге я немедленно разрешаю это обещание в этом примере.
Так почему и как может этот тест потерпеть неудачу?
Любая помощь была бы принята с благодарностью. Благодарю.
Я попытался использовать поддержку async ранее, но мое утверждение не было внутри инструкции myClass.myFunction(). Then(). Теперь это имеет больше смысла. Спасибо друг. – spryce