Angularjs 茉莉花业力测试$q未定义
这件事我已经做了100次了,但我一辈子都搞不清楚这里发生了什么 我有一个现有的测试模块,其中所有20多个测试都工作得很好 现在,我正在尝试向该服务添加Angularjs 茉莉花业力测试$q未定义,angularjs,karma-jasmine,Angularjs,Karma Jasmine,这件事我已经做了100次了,但我一辈子都搞不清楚这里发生了什么 我有一个现有的测试模块,其中所有20多个测试都工作得很好 现在,我正在尝试向该服务添加$q,以获得一种新方法。我使用的方法与之前使用的方法完全相同,但由于某些原因,$q未定义: describe( 'CacheService module', () => { let cacheService, $q, $scope; beforeEach( () => { angular.mock.module( 'a
$q
,以获得一种新方法。我使用的方法与之前使用的方法完全相同,但由于某些原因,$q
未定义:
describe( 'CacheService module', () => {
let cacheService, $q, $scope;
beforeEach( () => {
angular.mock.module( 'app.CacheService', ( $provide ) => {
$provide.value( '$q', $q );
});
inject( ( _$rootScope_, _$q_, _CacheService_ ) => {
$scope = _$rootScope_.$new();
$q = _$q_;
cacheService = _CacheService_;
console.log( _$q_ ); // undefined
});
});
});
测试中的服务声明为:
angular.module('app.CacheService', [] ).service( 'CacheService', [ '$q', function( $q ) {
....
}]);
谢谢为什么在模块定义中提供$q的值?作为$q提供的$provide值是未定义的,因此在inject块中时未定义。您的代码应该如下所示:
describe( 'CacheService module', () => {
let cacheService, $q, $scope;
beforeEach( () => {
//angular.mock.module( 'app.CacheService', ( $provide ) => {
// $provide.value( '$q', $q );
//});
// Do not provide a custom value for $q that is undefined
angular.mock.module( 'app.CacheService');
// Now $q will come from angular instead of your provided value,
// which was undefined since you never set it.
inject( ( _$rootScope_, _$q_, _CacheService_ ) => {
$scope = _$rootScope_.$new();
$q = _$q_;
cacheService = _CacheService_;
console.log( _$q_ ); // Should now be defined...
});
});
});
具体地说,当您希望覆盖现有定义时,可以在测试中使用带有$PROFECT的函数。例如,如果您正在测试一个依赖于使用$http的服务的控制器,那么您可能只想为服务中的所有这些方法创建存根(例如spy)。Ah!你说得对!我实际上是在我的实际代码中注入了另一个模拟服务,所以我仍然需要那个提供块,但是从中删除
$provide.value('$q',$q)
已经修复了它。谢谢。我只是把它拿出来,因为在你的例子中,你没有在里面设置任何其他东西。如果你提供模拟,肯定需要它。很高兴它现在起作用了。