我创建了一个带有模拟httpbackend调用的模块,因此我可以在没有后端服务器的情况下处理我的应用程序。这在开发期间非常有效。
在测试服务时,我想使用此模块提供模拟数据。我如何将其注入测试?
以下是模拟数据的模块:
angular.module('mockData', [ ]).run( function($httpBackend) {
$httpBackend.whenPOST( ( /\/verify-ticket.*/ ) ).respond( function( method, url, data, headers ) {
if ( url == '/verify-ticket?ticket=good' ) {
return[ 200, { verified : true, ticket : 'good' } ]
} else if ( url == '/verify-ticket?ticket=bad' ) {
return[ 200, { verified : false, ticket : 'bad' } ]
} else {
return [ 500 ]
}
});
$httpBackend.whenGET(/\.html$/).passThrough()
});
这是我的测试:
describe('service', function() {
var authService;
var rootScope;
beforeEach( function() {
module('services');
inject( function( AuthenticationService ) {
authService = AuthenticationService
});
inject( function( $injector) {
rootScope = $injector.get('$rootScope');
spyOn( rootScope, '$broadcast' );
} )
});
describe('authentication', function(){
it('a good ticket should pass', function() {
var runComplete = false;
runs( function() {
authService.verifyTicket( 'good' );
setTimeout( function() {
runComplete = true;
}, 1000)
});
waitsFor( function() {
return runComplete;
}, 'should be completed', 1200 )
runs( function() {
expect( rootScope.$broadcast ).toHaveBeenCalled();
expect( rootScope.$broadcast ).toHaveBeenCalledWith('verifyTicketResult', true );
})
});
});
});
答案 0 :(得分:0)
听起来你可能需要一个不同的模块,例如:
var mod = angular.module('tests', ['services', 'mockData']);
这应该允许您检索需要服务和mockData的模块测试。 如果这不起作用,请告诉我