AngularJSユニットテスト-2

2958 ワード

オブジェクトシミュレーション注入の使用
angularjsの$providerサービスを用いて,依存性をオブジェクトでシミュレートし,注入することが非常に容易である.
例は以下の通り
 angular.module('artists',[]).
    factory('Artists',['imageStore',function(imageStore){
        return {
            thumb:function(){
                return imageStore.thumbnailUrl(id)
            }
        }
    }])
実装方法
サービス1を特定する方法、URLの参照を作成する方法、後でmockによって取得され、Artistsに注入される変数
var URL;
var Artists;
2.次に、beforeEachメソッドで$provideサービスを使用してシミュレーションのfactoryサービスを登録する.オブジェクトを使用してthumbnailUrlメソッドをシミュレートします.
beforeEach(module(function($provide){
    $provide.value('imageStore',{
        thumbnailUrl:function(id){
            url='/thumb/'+id
        }
    })
})
3、$injectorサービスを使用してこのメソッドを注入し、このArtistsサービスを返し、さっき作成した変数で宣言します.後で使用できます.
 beforeEach(inject(function($inject){
    Artists=$inject.get('Artists');
 }))
4、Artistsを呼び出して簡単なテストを作成する
 it('return the correct artist thumbnailUrl',function(){
    Artists.thumb('1');
    expect(url).toBe('/thumbs/1');
 })
5.ここには$provideシミュレーションを使用した完全なテスト例があります.これはthumbnailUrlメソッドを定義したものを返します.
 describe('factory:artists',function(){
    var url;
    var Artists;
    beforeEach(module('artist'));
    beforeEach(module(function($provide){
        $provide.value('imageStore',{
            thumbnailUrl: function (id) {
            url = '/thumbs/' + id;
            }   
        })
    }));
    beforeEach(inject(function($injector){
        Artists=$injector.get('Artists')
    }))
    it('return the correct artist thumbnailUrl',function(){
        Artists.thumb('1');
        expect(url).toBe('/thumb/1')
    })
 
 })
specシミュレーションを使用した登録インスタンス
依存注入のインスタンスを宣言するために、次の例を宣言します.次に、2つのサービスがあり、2つ目のサービスが1つ目に注入されます.
 angular.module('hiphop',[])
    .factory('deejays',['$rootscope','scratch',function($rootscope,scratch){
        return{
            originator: 'DJ Kool Herc',
            technique: scratch.technique()
        }
    }])
    .factory('scratch',['$rootscope',function($rootscope){
        return{
            technique:function(){
                return 'breakbeat';
            }
        }
    }])
2、
 describe('Service: deejays',function(){
    beforeEach(module('hiphop'));
    var deejays;
    beforeEach(inject(function($injector){
        deejays=$injector.get('deejays');
    }))
    beforeEach(inject(function($provide) {
        $provide.value('scratch',jasmine.createSpyObj('scratch', ['technique']));
    }));
    it('should return the correct originator',function(){
        expect(deejays.originator).toBe('DJ Kool Herc');
    })
 })