2016-07-06 2 views
1

spyOnを使用すると、.and.callFake.andCallThroughのような別のフォームを使用できます。私は多くのことを試してみたどのタイプのスパイをテストに使用するのですか

describe('Spies on cookie.get', function() { 
    beforeEach(inject(function() { 
     spyOn(cookies, 'get').and.callFake(function() { 
     return undefined; 
     }); 
    })); 
    it("should work plz", function() { 
     cookies.get(); 
     expect(location.path()).toBe('/home'); 
     expect(cookies.get).toHaveBeenCalled(); 
     expect(cookies.get).toHaveBeenCalledWith(); 
    }); 
    }); 

:私は

...私は私がテストしようとしているこのコードで必要な1本当にわからないんだけど
var lastPage = $cookies.get("ptLastPage"); 
     if (typeof lastPage !== "undefined") { 
     $location.path(lastPage); 
     } else { 
     $location.path('/home'); //TRYING TO TEST THIS ELSE STATEMENT 
     } 
    } 

ここに私のテストコードの一部であります私はelseステートメントをテストしようとしています。したがって、私はcookies.get == undefinedにする必要があります。私はそれをやろう 毎回は、しかし、私はこのエラーを取得する:

Expected '' to be '/home'. 

cookies.get()undefinedに等しいときlocation.path()の値が変わることはありません。私は間違ってspyOnを使用していると思いますか?機能上の

beforeEach(inject(
    function(_$location_, _$route_, _$rootScope_, _$cookies_) { 
     location = _$location_; 
     route = _$route_; 
     rootScope = _$rootScope_; 
     cookies = _$cookies_; 
    })); 

フォローアップ:私のモック値に

フォローアップこれらの機能の

angular.module('buildingServicesApp', [ 
    //data 
    .config(function($routeProvider) { 
    //stuff 
    .run(function($rootScope, $location, $http, $cookies) 

ない名前、私はcookies.getを呼ぶんので、どのように?

+1

「クッキー」とは何ですか?それはどこから来たの?これが '$ cookies'をモックすることになっているなら、それは間違っています。 '$ cookies'は挿入されず、' cookies'は '$ cookies'ではありません。 – estus

+1

これにはショートカットがあります: 'spyOn(cookies、 'get')and.returnValue(undefined);' – Thomas

+0

私のモックを明確にするための編集を追加しました。それがあなたが意味するものなのかどうかはわかりませんが、私のコードでそれらのモックを持っていましたが、それらは表示されませんでした。 – FF5Ninja

答えて

2

今、location.path()の機能が設計通りに機能することをテストしています。私はAngularJSチームにテストを残すべきだと言っています:)。代わりに、関数が正常に呼び出されたことを確認します。あなたがcookies.getあなたのテストモックは、あなたがあなたの質問のコードの最初のビットがやっている呼び出し、どんな機能それをテストする必要があることをテストするべきではありません

describe('Spies on cookie.get', function() { 
    beforeEach((function() { // removed inject here, since you're not injecting anything 
     spyOn(cookies, 'get').and.returnValue(undefined); // As @Thomas noted in the comments 
     spyOn(location, 'path'); 
    })); 
    it("should work plz", function() { 
     // cookies.get(); replace with call to the function/code which calls cookies.get() 
     expect(location.path).toHaveBeenCalledWith('/home'); 
    }); 
    }); 

注意正しいこと。

+0

こんにちは、素晴らしい返信のおかげでありがとう。 残念ながら、関数/コードの呼び出しに関する私の問題は、1つではありませんか? それは私の問題の一つです... 私は別の編集で説明し、説明します。 – FF5Ninja

+0

この質問をご覧ください:http://stackoverflow.com/q/24948577/215552私はコントローラーと指令を超えて角度をテストすることについて多くのことを知らないのではないかと思います。 –

+0

OK、ありがとう!多分誰かが知っているだろう:) – FF5Ninja

関連する問題