2013-09-24 10 views
23

私はAngularJSのユニットテストを書く方法を学ぼうとしています。私は設定内で何のテストをしたいユニットAngularJSのコンフィグフェーズをテストする

angular.module(...).config(...)

で、初めに開始しました。

angular.module('ogApp', ['ngCookies','ui.router','ogControllers','ogServices','ogDirectives','ogMetricsData']) 

.config([ 
    '$stateProvider', '$locationProvider', 
    function ($stateProvider, $locationProvider) { 
    $stateProvider. 
     state('login', { 
     templateUrl: 'connect.html' 
     }).state('addViews', { 
     templateUrl: 'add-views.html' 
     }).state('dashboard', { 
     templateUrl: 'dashboard.html' 
     }); 
    $locationProvider. 
     html5Mode(true). 
     hashPrefix('!'); 
    } 
]); 

私はこのコードをテストする最も簡単な方法は、$stateProvider$locationProviderのためのモックを注入することであると思っています。ここでは、関連する部分がどのように見えるかです。その後、configフェーズを実行します。その後、$stateProvider$locationProviderのようにする必要があります。

もし私の考えが正しいのであれば、私の問題は、それらのモックをモジュールに注入し、テストからその設定フェーズを実行する方法がわかりません。

このコードのテスト方法を教えてください。

+0

これを処理するのに適したソリューションを見つけましたか? – Brune

+0

@Brune Nope。しかし、私が見ていない新しい答えがあります。 –

答えて

0

あなたはそれらを注入するモックサービスを作成するためにJasmine'screateSpycreateSpyObjを使用し、 angular-mocks.jsことができます。ここでモックを注入する上

詳しい説明:this testInjecting a mock into an AngularJS service

私はあなたが次のように表示することができます私の指示のために書いた:

  • 9行目はGoogleのCDN
  • からの角度-モックを含めます行19 & 20擬似rootScopeオブジェクトを作成する
  • 行21 & 22偽qサービスを作成する
  • ライン42セットアップサービス
  • ライン48インスタンス化偽物を有するサービスに偽物を注入するプロバイダは、
  • 線53コール試験される方法(このサービスは、試験下の指令に注入される)
  • ライン55 - 偽物の状態で59アサート
+3

Jason、最後のリンクが壊れています。また、私の挑戦は一般的に偽の依存関係を注入することではありません。 ** config **ブロックに偽の**プロバイダ**を注入するだけです。 –

+1

MK、同じ解決策を見つけられましたか?私は同じ問題を抱えており、この指令をテストすることはできません。 –

+0

@PriyabratNandaNopeしかし、私が見ていない新しい答えがあります。 –

8
ここ

ユニットテストのために、あなたのプロバイダにアクセスする方法は次のとおりです。

describe('yourProvider', function() { 
    var provider; 

    // Get the provider 
    beforeEach(module('app', function (yourProvider) { 
     // This callback is only called during instantiation 
     provider = yourProvider; 
    }); 

    // Kick off the above function 
    beforeEach(inject(function() {})); 

    it('does its thing', function() { 
     expect(provider.someMethod()).toEqual('your results'); 
    }); 
}); 

私はあなたがたではない持っていますあなたはモックを注入する本当に簡単な方法を考え出しましたが、簡単にメソッドを偵察することができます。依存関係プロバイダの。$ get()メソッドから返されたモックが必要な場合は、別のスパイでも行うことができます。この例は、モックを返し、追加のスパイを設定する方法を示しています。

describe('yourProvider', function() { 
    var dependency, mock, provider; 

    beforeEach(module('app', function (dependencyProvider) { 
     dependency = dependencyProvider; 
     mock = jasmine.createSpyObj('dependency', [ 
      'methodsGoHere' 
     ]); 
     spyOn(dependency, 'methodName'); 
     spyOn(dependency, '$get').andReturn(mock); 
    }, function (yourProvider) { 
     provider = yourProvider; 
    }); 

    beforeEach(inject(function() {})); 

    it('does its thing', function() { 
     expect(provider.someMethod()).toEqual('your results'); 
     expect(dependency.methodName).toHaveBeenCalled(); 
    }); 

    it('returns the mock from $get', function() { 
     expect(dependency.$get).toBe(mock); 
    }); 
}); 
0

私はファンクションを指すファクトリを作成しますが、このファンクションはconfigファンクション内でも呼び出されます。そうすれば、工場をユニットテストすることができます。

他の工場と同じようにユニットをテストしてモックを注入できます。

関連する問題