{ it("should trigger .the-6ren">
gpt4 book ai didi

javascript - Promise .then 使用 Karma + Jasmine + PhantomJs 时不会触发?

转载 作者:行者123 更新时间:2023-12-03 01:37:35 24 4
gpt4 key购买 nike

由于某种原因,我的单元测试无法点击 then 函数。这是测试代码。

describe("Basic promise test", () => {
it("should trigger .then function", () => {
var mock = jasmine.createSpy('some method');
var promise = new Promise((resolve, reject)=> {
console.log("inside Promise");
resolve('something');
console.log("done!");
});
promise.then(mock);
promise.then(function () { //neither works!
mock();
console.log("resolved"); //code does reach here but only after test fails
});

expect(mock).toHaveBeenCalled();
});
});

我尝试使用“babel-polyfill”、“es6-promise”和“promise-polyfill”但无济于事。我做错了什么?

Jsfiddle 为此:https://jsfiddle.net/L53zxe39/

最佳答案

promise 已解决,但 then 回调仅在下一个微任务中调用,检查expect(mock).toHaveBeenCalled(); 已制作。

这是预期的行为,旨在防止 promise 出现歧义。即使 Promise 已经解决,.then 回调也保证稍后被调用。

异步 ​​jasmine 测试按以下方式工作:

describe("Basic promise test", () => {
it("should trigger .then function", (done) => {
var mock = jasmine.createSpy('some method');
var promise = new Promise((resolve, reject)=> {
console.log("inside Promise");
resolve('something');
console.log("done!");
});
promise.then(mock).then(() => {
expect(mock).toHaveBeenCalled();
done();
}).catch(e => {
done.fail(e);
});
});
});

您可以使用done.fail显式地使规范失败。这是在测试期间捕获并通知 jasmine 未捕获的异常所必需的。

关于javascript - Promise .then 使用 Karma + Jasmine + PhantomJs 时不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37993662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com