car*_*tax 3 javascript qunit promise rsvp.js rsvp-promise
我正在为一个返回promise的函数编写测试,并且无法在解析或拒绝promise时运行断言.我不能在这个项目上使用ES6所以我使用的是声称实现Promises/A +规范的rsvp.js库.我正在使用最新的qunit版本1.17.1
被测功能:
var loadGroups = function(data) {
return new RSVP.Promise(function(resolve, reject) {
var groups = [];
// ... some code to populate the groups array
if(groups.length > 0) {
resolve(groups);
} else {
reject("No groups were loaded");
}
});
};
Run Code Online (Sandbox Code Playgroud)
成功测试:
test('success test', function(assert) {
assert.expect(1);
var promise = loadGroups(testData);
promise.then(function(groups) {
assert.deepEquals(groups.length, 1);
});
return promise;
});
Run Code Online (Sandbox Code Playgroud)
这失败了"预期的1个断言,但是0运行"
失败测试:
test('failure test', function(assert) {
assert.expect(1);
var promise = loadGroups([]);
promise.then(null, function(message) {
assert.equals(message, "No groups were loaded");
});
return promise;
});
Run Code Online (Sandbox Code Playgroud)
这失败了"在加载空组时获得承诺时拒绝承诺:没有加载任何组"
Ben*_*aum 11
承诺通过链接工作.Promise是值不可变的包装器.
当你这样做时:
promise.then(function(e){
// do something
});
Run Code Online (Sandbox Code Playgroud)
你并没有改变promise你正在创造一个新的承诺.相反,你需要链接承诺:
test('success test', function(assert) {
assert.expect(1);
var promise = loadGroups(testData);
// return the `then` and not the original promise.
return promise.then(function(groups) {
assert.deepEquals(groups.length, 1);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |