2016-05-11 12 views
1

コントローラーがロードされたときに実行されるロジックを持つコントローラーがあります。AngularJS 1.2xコントローラー負荷のジャスミンテストロジック

このロジックは、サービス内の値をチェックし、値に応じてアクションを実行します。

if(FunkyService.foo()) { 
    doA(); 
} else { 
    doB(); 
} 

は、私は(私のサービスの関数foo()でtrueまたはfalseこの例では)サービスを持つことができ、各値のために成果をテストすることができジャスミンテストを書きたいです。

私の問題は、コントローラーがbeforeEach()関数でロードされていることです。これは、テストでサービスの値を切り替えるには遅すぎることを意味します。 beforeEach()でfoo()関数の結果を設定した場合、真と偽の両方の結果をテストする方法を理解できません。

私には2つの質問があります。

  • コントローラをテストのいずれかに再ロードするにはどうすればよいですか?これにより、サービスfoo()関数の戻り値を変更して、ロード時にコントローラがロジックを再実行するように強制できます。

  • これとはまったく異なる方法で接近する必要がありますか?私は、別の中に置かれた任意の活性化またはコントローラレベルの変更を行ってきたすべてのユニットテストでは

答えて

2

この例では、私はに渡されているもの(DOAおよびDOBがfalse/trueに変数を設定しますと仮定しているため説明サービス)。

describe("Setting up globals", function() { 
    var foo; 

    beforeEach(function() { 
    foo = false; 
    }); 

    it("is just a function, so it can contain any code", function() { 
    expect(foo).toBe(false); 
    }); 

    it("can have more than one expectation", function() { 
    expect(true).toEqual(true); 
    }); 

    describe("testing service for true", function() { 
    var sut; 

    beforeEach(function() { 
     sut = new FunkyService(true); 
    }); 

    it("can reference both scopes as needed", function() { 
     expect(foo).toEqual(true); 
    }); 
    }); 



    describe("testing service for false default action", function() { 
    var sut; 

    beforeEach(function() { 
     sut = new FunkyService(false); 
    }); 

    it("can reference both scopes as needed", function() { 
     expect(foo).toEqual(false); 
    }); 
    }); 

}); 
+0

ありがとうございました!これは完全に機能しました – Stephen