我有以下功能实现
function getRepo(url) {
var repos = {};
if (repos.hasOwnProperty(url)) {
return repos[url];
}
return $.get(url)
.then(repoRetrieved)
.fail(failureHandler);
function repoRetrieved(data) {
return repos[url] = data;
}
function failureHandler(err, xhr) {
throw new Error(xhr.responseText);
}
}
Run Code Online (Sandbox Code Playgroud)
我写了以下测试:
describe('"getRepo" method', function() {
var getDeffered;
var $;
beforeEach(function() {
getDeffered = Q.defer();
$ = jasmine.createSpyObj('$', ['get']);
$.get.and.returnValue(getDeffered.promise);
});
it('should return a promise', function(){
expect(getRepo('someURL')).toEqual(getDeffered.promise);
});
});
Run Code Online (Sandbox Code Playgroud)
而这个测试失败了。我想是因为我调用了 then 方法。
如果函数实现是:
function getRepo(url) {
return $.get(url);
}
Run Code Online (Sandbox Code Playgroud)
这是 jasmine 在使用 Q.defer() 时抛出的消息
Expected { …Run Code Online (Sandbox Code Playgroud)