我创建了一个带有模拟 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 );
})
});
});
});