【发布时间】:2016-06-23 13:53:10
【问题描述】:
由于某种原因,我的单元测试无法运行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 异步解析,所以需要使用 jasmine 的异步测试功能。根据this article 和this SO answer,这涉及到使用
runs和waitsFor。我会发布它作为答案,但我对茉莉花一无所知,也许有比runs和waitsFor更具体的承诺测试。 -
@T.J.Crowder 请在此处查看 jsfiddle:jsfiddle.net/L53zxe39。我已经尝试过使用
waitsFor,但它会引发错误,因为我使用的是 Jasmine 2.0(我认为他们已经删除了它) -
是的,这就是为什么我没有发布答案,我只是不知道茉莉花,无法判断文章的年龄,而我找到的答案是从 2013 年开始的,当时还没有真正的承诺大的。但从根本上说,问题在于分辨率是异步的,所以茉莉花需要知道这一点。因此,请查看 jasmine 文档,了解当前测试基于 Promise 的 API 的方法。
标签: javascript jasmine karma-runner karma-jasmine es6-promise