我需要使用jasmine测试一个promise,我可以在本机javascript(使用Promise
构造函数)或jQuery(使用$.Deferred()
方法)中编写promise。我不能使用angularJS。
当我尝试解析jasmine中的promises时,永远不会调用关联解析事件的方法。有关角度承诺的堆栈溢出有很多解决方案,但我找不到本机或jQuery承诺的解决方案。
这里是测试示例(我删除了每个代码,而我只留下了与promise相关的部分更合成):
describe('test native promises', function () {
it('should resolve the promise', function () {
var result;
var promise = new Promise(function (callback) {
callback({});
});
promise.then(function (response) {
console.log('called 1');
result = response;
});
Promise.resolve({}).then(function (response) {
console.log('called 2');
result = response;
});
expect(result).toBeDefined();
});
});
永远不会调用console.log
,result
未定义(因此测试失败)。
jQuery承诺的同样问题:
describe('test jQuery promises', function () {
it('should resolve the promise', function () {
var result;
var deferred = $.Deferred();
deferred.promise().then(function (response) {
console.log('called 3');
result = response;
});
deferred.resolveWith({});
expect(result).toBeDefined();
});
});
变量result
仍未定义且console.log
从未调用过。
这是茉莉花单元测试中的一个问题,承诺在浏览器中运行良好(两个版本)。
我在单元测试中遗忘了什么?
据报道为duplicated question,但问题完全不同,在这种情况下,承诺根本没有被调用。