2016-05-03 14 views
0

定数サービスを変更する必要があります。このサービスにはテストは付属していませんが、私はJasmineで書いてくれる単体テストでファイルと修正を少なくとも部分的にカバーしたかったのです。これは、ルートの解決プロセス(私たちはui-routerを使用)で使用されている

(function() { 
    angular 
    .module('app') 
    .constant('myService', myService); 

    function myService() { 
     dependencyOne: dependencyOneImpl, 
     someFunction: someFunctionImpl 
     ... 
    } 

    dependencyOneImpl.$inject = ['someDependency']; 
    function dependencyOneImpl(someDependency) { 
     ... 
    } 

    someFunctionImpl.$inject = ['dependencyOne', 'dependencyTwo']; 
    function someFunctionImpl(dependencyOne, dependencyTwo) { 
     ... 
    } 
})(); 

:よう

サービスが見えます。特定のルートがアクティブになると、サービスの機能が呼び出されます:

someRoute = { 
    url: '...', 
    name: '...' 
    views: { ... }, 
    resolve: { resolver.someFunction } 
} 

は、サービスの構築に必要な依存関係はありません、と私は、公共の機能のいずれかをテストしようとしているそのサービスが公開。私は手動機能により必要な依存関係を解決することができ

prepareSomeSetup(); 
theService.someFunction(); 
assertSomething(); 

が、私は、UI-ルータがきているのと同じ動作を得ることができれば私が知りたいのですが:

は、一般的に私のようなテストを記述しますその機能を解決する。依存関係が解決され、関数が実行されているように見えます。

テストファイルに$ injectorサービスを注入して手動で関数呼び出しを呼び出す必要があったのですが、動作していないようです。

どのように2つの依存関係が解決された関数を呼び出すことができますか?あなたは注射用関数を定義するとき

+1

$ inject、配列表記、または単純ではないマイナーな表記を使用しても、サービスのインスタンスの取得方法は変わりません。 inject(constantsService)を使用すると、angleはサービスの依存関係を作成してサービス自体に挿入し、その関数にサービスを注入します。何がうまくいかない、正確には? –

+0

ありがとう@JBNizet!、多分私は全体を間違って公開しました。この場合、関数となるSUTを実行したいとき、すべての依存関係は未定義です(パラメータを指定していないため)。私は質問を更新しましょう。 – IoChaos

+0

私はあなたの質問を理解していません。サービスの実際の完全なコードとテストの実際の完全なコードとエラーをなぜ投稿しないのですか?私が言ったように、依存関係は**解決すべきです**。 –

答えて

1

あなたは$injector.invoke(fn, scope, otherArgs);

使用してそれを呼び出す必要がどこに

  • インライン注入
  • スコープのための注射機能、または配列FN:「この」機能の
  • otherArgs:その他サービスとして定義されていない引数。...あなたが注入する角度。
+0

@walfratありがとうございました! :)。私の問題は、メソッドの依存関係のいくつかは、他の関数と同じファイルに定義されていることです。コードでわかるように、 'dependencyOne'は同じファイルに定義されています。私がinjector.invokeを使うと、彼は 'dependencyOne'を見つけることができないので失敗します。あなたが言ったように、私はotherArgsでそれを提供することができますが、問題は手動で依存関係を解決する必要があり、複雑な場合があります(例ではリストが大きく、構成が深い)。これを避ける方法はありますか? – IoChaos

+1

コードdependencyOneは角度環境には追加されません。 myServiceだけが '.service'メソッドによって追加されます。したがって、依存関係を角度サービスにするか、必要な場所に 'myService'を挿入し、' myService.dependencyOne'を使用する必要があります。厳密なDI modを角度で有効にしましたか? $ injectを定義していないかインラインインジェクションを使用していれば、厳密なDIはあなたのコードをクラッシュさせるはずです['' '、function(a){}] '。これは、小型化が完了すると機能しないためです – Walfrat

関連する問題