Angular JS:在Jasmine中无法用promises测试服务函数
Angular JS : Not able to test service function with promises in Jasmine
这里,_fact是对服务的引用。
it('Git Check', function() {
$scope.user = 'swayams'
var data;
_fact.Git($scope).then(function(d) {
expect(d.data.length).toEqual(4)
}, function() { expect(d).not.toBeNull(); });
});
我得到错误
SPEC HAS NO EXPECTATIONS Git Check
根据@FelisCatus强制异步并添加$formDigest
后,我得到了不同的错误Error: Unexpected request: GET https://api.github.com/users/swayams/repos
No more request expected
it('Git Check', function(done) {
$scope.user = 'swayams'
var data;
_fact.Git($scope).then(function(d) {
expect(d.data.length).toEqual(4)
}, function() { expect(d).not.toBeNull(); });
});
$rootScope.$formDigest();
我这里有一个Plunk来说明这个问题。
Jasmine没有看到您的期望,因为您的函数在调用任何expect()
之前返回。根据你的情况,你可能想使用异步测试,或者使用一些承诺匹配器。
使用异步测试,您可以向测试函数done
添加一个额外的参数。
it('Git Check', function (done) {
$scope.user = 'swayams'
var data;
_fact.Git($scope).then(function(d) {
expect(d.data.length).toEqual(4);
}, function() { expect(d).not.toBeNull(); }).finally(done);
$rootScope.$digest();
});
(注意promise链末尾的finally子句)
请注意,你必须做$rootScope.$digest()
承诺解决,即使你的代码不使用它。参见:在没有$作用域强制摘要的情况下,如何解决AngularJS, Jasmine 2.0中的承诺?
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 可以简化嵌套的延迟Q Promises解析吗
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 一个密码测试程序,如果存在空格,它会提醒用户
- 如何测试 jQuery 3.0 beta 在浏览器中是否兼容 Promises/A+
- Promises:对一个递归方法进行单元测试,该方法在队列中一个接一个地触发promise
- Angular JS:在Jasmine中无法用promises测试服务函数
- 如何使用Jasmine.js对Javascript Promises进行单元测试?