Angular JS:无法在 Jasmine 中使用承诺测试服务功能
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 没有看到您的期望,因为您的函数 returns 在任何 expect()
被调用之前。根据你的情况,你可能想要使用异步测试,或者使用一些 promise matchers.
对于异步测试,您可以向测试函数添加一个额外的参数,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()
才能解决承诺。参见:How to resolve promises in AngularJS, Jasmine 2.0 when there is no $scope to force a digest?
这里,_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 没有看到您的期望,因为您的函数 returns 在任何 expect()
被调用之前。根据你的情况,你可能想要使用异步测试,或者使用一些 promise matchers.
对于异步测试,您可以向测试函数添加一个额外的参数,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()
才能解决承诺。参见:How to resolve promises in AngularJS, Jasmine 2.0 when there is no $scope to force a digest?