2013-09-07 10 views
8

私はyeomanで生成したangularjsアプリケーションを持っています。 karma.conf.jsにはtest/mock/**/*。jsへの参照があります。私はこのフォルダをどのように使用するかを調べるのに困っています。yeoman angularjsのカルマテスト用モックフォルダを使用

'use strict'; 

angular.module('tvcalApp') 
    .factory('Series', function ($resource) { 
    return $resource('/search/:search'); 
    }); 

とこれが動作しているテスト

'use strict'; 

var $httpBackend; 

describe('Service: Series', function() { 

    // load the service's module 
    beforeEach(module('tvcalApp')); 

    // instantiate service 
    var Series; 
    beforeEach(inject(function (_Series_) { 
    Series = _Series_; 
    })); 

    beforeEach(inject(function ($injector) { 
     var url_get = '/search/The%20Simpsons'; 

     var response_get = [{"seriesid": "71663"}]; 

     $httpBackend = $injector.get('$httpBackend'); 

     $httpBackend.whenGET(url_get).respond(response_get); 

    })); 

    it('should return a list if search for The Simpsons', function() { 
     var res = Series.query({search: 'The Simpsons'}); 
     $httpBackend.flush(); 
     expect(res[0].seriesid === 71663); 
     }); 

}); 

:現在、私は、単純なサービスを持っています。しかし、mocking機能のためにkarma.conf.jsからモックフォルダを使用できるかどうかは疑問です。モックパートをモックフォルダに移動してすべてのユニットテストに使用できますか?

このフォルダのサンプルまたはドキュメントが見つかりませんでした。誰かがモックフォルダを使用する方法の例やドキュメントを教えてください。

+0

あなたはその情報を入手できましたか? – gerasalus

答えて

7

基本的に私はこのような角度のモックを見ています:
アプリがqlと呼ばれているとしましょう。そして、私はモックとしたいloginServiceがあります。

モックを/ servicesMock.jsは、次のようになります

'use strict'; 

var ql = {}; 
ql.mock = {}; 

ql.mock.$loginServiceMockProvider = function() { 
    this.$get = function() { 
    var $service = { 
     login: function() { } 
    }; 
    return $service; 
    }; 
}; 

angular.module('qlMock', ['ng']).provider({ 
    $loginServiceMock: ql.mock.$loginServiceMockProvider 
}); 

はその後、私のテストで私は$ loginServiceMockをinjeckことができます。

'use strict'; 

describe('LoginController tests', function() { 
    // load the controller's module 
    beforeEach(module('ql')); 
    // load our mocks module 
    beforeEach(angular.mock.module('qlMock')); 

    var loginController, 
    loginServiceMock, 
    scope; 

    // Initialize the controller and a mock scope 
    // $loginSericeMock will be injected from serviceMocks.js file 
    beforeEach(inject(function ($controller, $rootScope, $loginServiceMock) { 
    scope = $rootScope.$new(); 
    loginServiceMock = $loginServiceMock; 
    loginController = $controller('LoginController', { 
     $scope: scope, 
     loginService: loginServiceMock 
    }); 
    })); 
}); 
3

例@gerasalusによると便利ですが、質問に答えるために:

mocksはあなたのプロジェクトを整理し、テストのコードを短くしておくためのコードを入れる単なるフォルダですポイント。すべてのモックを1つの場所に保つことで、テストでそれらを再利用する方が簡単です。あるテストから別のテストにそれらをコピーすることは、DRYの観点から悪い習慣です。その後、

したがって、たとえば、あなたは次にあなたがそのサービスのモックを作成することができます「フー」

app/service/foo.js 

と呼ばれるサービスがあるかもしれない、「FooMock」と呼ばれる

test/mocks/service/foo.js 

そして、あなたが考えgerasulusの答えに示されているように、テストを作成し、必要なモックを注入します。

関連する問題