将Angular模拟数据模块传递或注入茉莉花测试?

时间:2013-11-05 19:54:18

标签: angularjs jasmine

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

    });
});

});

1 个答案:

答案 0 :(得分:0)

听起来你可能需要一个不同的模块,例如:

var mod = angular.module('tests', ['services', 'mockData']);

这应该允许您检索需要服务和mockData的模块测试。 如果这不起作用,请告诉我