Я ужасен в асинхронности в целом.Я прочитал все остальные ответы, но они не помогли мне понять это.Вот код, который я пытаюсь проверить:
$("#do").click(function() {
someFunction().then(function(result) {
if (result.error) {
failureFunction(result.error_message)
} else {
successFunction(result.token)
}
})
})
someFunction()
- это асинхронная функция, которая будет возвращать либо {error: true, error_message: "failed due to error"}
, либо {token:"success token"}
.
Я бы хотел проверитьчто обе ветви работают, то есть, что failureFunction
и successFunction
вызываются соответствующим образом с правильными аргументами.
Вот мой Жасмин:
describe("calling someFunction", function() {
describe("when result is good", function() {
beforeEach(function() {
spyOn(window, "successFunction")
response = Promise.resolve({token: "asdf"});
spyOn(window, "someFunction").and.returnValue(response)
$("#do").trigger("click")
})
it("should call successsFunction appropriately", function(){
expect(window.successFunction).toHaveBeenCalledWith("asdf")
})
})
// ... once I get above to pass it's just emulating with failureFunction
})
Ошибка, которую я получаю при запуске:
TypeError: Cannot read property 'then' of undefined
Так что я предполагаю, что заглушен returnValue
из someFunction
(то есть response
) не является объектом обещания, для которого можно вызвать .then
... но мне это кажется правильным?