2016-05-13 6 views
0

この質問に対して重複がありましたが、問題を解決できませんでした。コントローラの初期化中にJasmine Js-SpyOn Fakecall

私はコントローラを持っており、コントローラの初期化中にfetchtemplate()が最初に呼び出されてから、私のfetchtemplate()が呼び出されています。

コントローラーの初期化中に実際の(コントローラー)fetchtemplate()を呼び出すのを止めるにはどうすればよいですか?私はその時に存在していないfetchtemplate()としてエラーが発生しましたthis.init()前spyOnを配置しようとしている

describe("...",function(){ 
    beforeEach(inject(function($controller,...) { 
    scope  = $rootScope.$new(); 

    this.init = function() { 
        $controller('ChangeControlCreateController', { 
        $scope: scope 
        }); 
       } 
    })); 
    describe('Function', function() { 

     it("-- check for trueness",function(){ 

     this.init()  ; //Initialization of the controller 
     spyOn(scope,'fetchtemplate').and.callFake(function() { 
        return 101; 
       }); 
     var fakeResponse = scope.fetchtemplate(); 
     expect(scope.fetchtemplate).toHaveBeenCalled(); 
     expect(fakeResponse).toEqual(101);  
     }); 


    }); 
}); 

- 私の意図は、私のspec.Pleaseに()関数fetchtemplateを嘲笑私のスペックを見ていることですスパイオンする時間。

angular.module('...', [...]) 

    .controller('ChangeControlCreateController', ["$scope"..., 
    function ChangeControlCreateController($scope,...) { 
     $scope.fetchtemplate = function() { 
      console.log("controller's function");    
      ... 
     }; 
     $scope.fetchtemplate(); 
    }); 

私が取得していますどのような結果がある - - まずコンソール項目「コントローラの機能」とし、仕様はモック機能が実行されている

私のコントローラのコードの構造は次のようになります。私はあなたがテスト目的でないようにしたい何かをやっている機能にはいくつかの呼び出しを行っている、正しく理解していればそれで

+0

便利です願っていますあなたも私たちにコントローラコードを与えることができますか?私はあなたがそのfetchtemplateメソッドをどのように呼び出すのかを知る必要があります。 – sam

+0

確かに、コントローラのコード構造も追加しました。 @サム – M3ghana

答えて

1

を実行するためにせず、コントローラの機能を実行するためのモック機能が欲しいです。おそらくhttpコールかその種のものでしょうか?

何かを処理する適切な方法は、通常、そのメソッドをサービスの中に入れ、そのサービスメソッドを偵察することです。サービスがTemplateServiceであればここではテストの例です:

describe("...",function(){ 

var $controller, scope, TemplateService, YourController; 

beforeEach(inject(function(_$controller_, _TemplateService_, ...) { 
    scope = $rootScope.$new(); 
    $controller = _$controller_; 
    TemplateService = _TemplateService_; 
} 

it("-- check for trueness",function(){ 

    spyOn(TemplateService,'fetchTemplate').and.returnValue('101'); 

YourController = $controller('YourController'); 
    expect(...); 
}); 


}); 

私は

+0

こんにちはサム、返信いただきありがとうございます。私のサービスを機能させることなく問題を解決することはできますか? – M3ghana

+0

あなたはおそらく角度の基本的な振る舞いを無効にすることができます。あなたが言ったように、まだ存在しないものに介入することはできません。 – sam

+0

さて、ありがとう。 – M3ghana

関連する問題