Promise .then 在使用 Karma + Jasmine + PhantomJs 时不触发?
Promise .then not triggering when using Karma + Jasmine + PhantomJs?
出于某种原因,我的单元测试无法使用 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/
承诺已解决,但 then
回调仅在下一个微任务中调用,在 检查 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
来显式使规范失败。这是在测试期间捕获并通知 jasmine 未捕获的异常所必需的。
出于某种原因,我的单元测试无法使用 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/
承诺已解决,但 then
回调仅在下一个微任务中调用,在 检查 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
来显式使规范失败。这是在测试期间捕获并通知 jasmine 未捕获的异常所必需的。