由于某种原因,我的单元测试无法实现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-poly填充”、“ES6-诺言”和“答应-填充”,但都没有效果。我做错了什么?
Jsfiddle用于这个:https://jsfiddle.net/L53zxe39/
发布于 2016-06-23 14:04:39
承诺已解决,但then
回调仅在下一个微任务()中调用,即在完成检查expect(mock).toHaveBeenCalled();
之后调用expect(mock).toHaveBeenCalled();
。
这是有意采取的行为,旨在防止围绕承诺的模棱两可之处。即使承诺已经解决,也保证稍后调用.then
回调。
异步茉莉花测试的工作方式如下:
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
显式地失败规范。这是需要捕获和通知茉莉花在测试期间的不明确的异常。
https://stackoverflow.com/questions/37993662
复制相似问题