Javascript 如何用Jasmine 2.0测试ES6承诺?
我有一个返回(ES6)承诺的函数,我想写一个Jasmine测试,检查它是否成功解析,解析值是否正确。我该怎么做 这是我目前发现的方式,但至少很无聊:Javascript 如何用Jasmine 2.0测试ES6承诺?,javascript,jasmine,promise,es6-promise,Javascript,Jasmine,Promise,Es6 Promise,我有一个返回(ES6)承诺的函数,我想写一个Jasmine测试,检查它是否成功解析,解析值是否正确。我该怎么做 这是我目前发现的方式,但至少很无聊: describe("Promises", function() { it("should be tested", function(done) { var promise = functionThatReturnsAPromise(); promise.then(function(result) { expect(r
describe("Promises", function() {
it("should be tested", function(done) {
var promise = functionThatReturnsAPromise();
promise.then(function(result) {
expect(result).toEqual("Hello World");
done();
}, function() {
expect("promise").toBe("successfully resolved");
done();
});
});
});
还有一个名为的库似乎很有用,但遗憾的是,它在Jasmine 2.0中不起作用,因为它使用了已被删除的runs()
在Jasmine 2.0中,是否已经为测试承诺开发了合适的解决方案?老实说,我会使用Mocha。在Mocha中,您可以简单地返回一个承诺,并且语法非常相似,因为您已经在使用Mocha的语法进行异步测试。它看起来类似于:
describe("Promises", function() {
it("should be tested", function() {
var promise = functionThatReturnsAPromise();
return promise.then(function(result) {
expect(result).toEqual("Hello World");
}, function() {
expect("promise").toBe("successfully resolved");
});
});
});
但是,如果您坚持本机承诺,而无法使用摩卡咖啡——您拥有的可能是唯一的选择,那么您可以将模式提取到一个方法中:
function itP(description, itfn){
it(description, function(done){
var result = itfn(); // call the inner it
if(result.then) { // if promise was returned
result.then(done, function(e){
throw new Error("Async rejection failed " + e.message);
}); // resolve means done, reject is a throw
} else {
done(); // synchronous
}
});
}
itP("something", function(){
return Promise.reject(); // this turns into a failed test
});
老实说?我会使用Mocha。在Mocha中,您只需返回一个承诺,语法非常相似,因为您已经在使用Mocha的语法进行异步测试。它看起来像:
describe("Promises", function() {
it("should be tested", function() {
var promise = functionThatReturnsAPromise();
return promise.then(function(result) {
expect(result).toEqual("Hello World");
}, function() {
expect("promise").toBe("successfully resolved");
});
});
});
但是,如果您坚持本机承诺,而无法使用摩卡咖啡——您拥有的可能是唯一的选择,那么您可以将模式提取到一个方法中:
function itP(description, itfn){
it(description, function(done){
var result = itfn(); // call the inner it
if(result.then) { // if promise was returned
result.then(done, function(e){
throw new Error("Async rejection failed " + e.message);
}); // resolve means done, reject is a throw
} else {
done(); // synchronous
}
});
}
itP("something", function(){
return Promise.reject(); // this turns into a failed test
});
在这里参加聚会有点晚了,但如果其他人发现这个问题(我也发现了)-这里有一个新的答案:使用我的“”组件。使用它,上面的测试将如下所示:
var promise = functionThatReturnsAPromise();
expect(promise).toBeResolvedWith("Hello World");
Bower和NPM(只需
安装jasmine-es6-promise-matchers
)上提供了它。在这里参加聚会有点晚,但如果其他人发现这个问题(我也发现了),这里有一个新的答案:使用我的“”组件。使用它,上面的测试将如下所示:
var promise = functionThatReturnsAPromise();
expect(promise).toBeResolvedWith("Hello World");
它在Bower和NPM上可用(只需
安装jasmine-es6-promise-matchers
)。反馈会更好我查看了Mocha,但它似乎只支持最新的浏览器(例如IE9/10+,具体取决于断言库),我现在宁愿避免使用(同时,我必须将所有断言重写为新格式)。itP解决方案不是最吸引人的,但它可能会起作用;不过我还没有足够的时间彻底测试它。我还在等待另一个库的帮助,该库旨在帮助测试RSVP承诺(ES6承诺基于RSVP)。反馈会更好。我查看了Mocha,但它似乎只支持最新的浏览器(例如,IE9/10+取决于断言库),目前我宁愿避免使用(同时,我必须将所有断言重写为新格式)。itP解决方案不是最吸引人的,但它可能会起作用;但我没有足够的时间对其进行彻底测试。我还在等待另一个库的帮助,该库旨在帮助测试RSVP承诺(ES6承诺基于RSVP)最后,我结束了这样的制作。此外,它支持测试用例之间的依赖关系。你太棒了!谢谢你分享。最后,我结束了这样的制作。此外,它支持测试用例之间的依赖关系。你太棒了!谢谢你分享。非常感谢!你的PR发布为2.0.2版。非常感谢恭喜!您的PR已发布为2.0.2版。