2016-07-06 4 views
1

Я знаю, когда вы используете spyOn, у вас могут быть разные формы, такие как .and.callFake или .andCallThrough. Я не совсем уверен, которое мне нужно для этого кода я пытаюсь проверить ...Какой тип шпиона использовать для тестирования

var lastPage = $cookies.get("ptLastPage"); 
     if (typeof lastPage !== "undefined") { 
     $location.path(lastPage); 
     } else { 
     $location.path('/home'); //TRYING TO TEST THIS ELSE STATEMENT 
     } 
    } 

Вот некоторые из моего тестового кода:

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(); 
    }); 
    }); 

Я пытался много из разных вещей, но я пытаюсь проверить заявление else. Поэтому мне нужно сделать cookies.get == undefined. Everytime я пытаюсь сделать это, хотя, я получаю эту ошибку:

Expected '' to be '/home'. 

Значение location.path() никогда не меняется, когда cookies.get() равно undefined. Я думаю, что неправильно использую 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' не '$ cookie'. – estus

+1

Для этого есть ярлык: 'spyOn (cookies, 'get'). And.returnValue (undefined);' – Thomas

+0

Я добавил редактирование, чтобы помочь прояснить мои макеты. Не уверен, что это то, что вы имели в виду, но у меня были эти макеты в моем коде, они просто не показывались. – FF5Ninja

ответ

2

Прямо сейчас, вы проверяете, что функция location.path() работает так, как она была разработана. Я бы сказал, что вы должны оставить это тестирование команде AngularJS :). Вместо этого, убедитесь, что функция была вызвана корректно:

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'); 
    }); 
    }); 

Обратите внимание, что вы не должны испытывать, что ваши тесты издеваться cookies.get, вы должны проверять, что все вызовы функций, первый бит кода в вашем вопросе делает правильная вещь.

+0

Эй, спасибо за удивительный ответ чувак. К сожалению, моя проблема с вызовом функции/кода там не одна? Это была одна из моих проблем ... Я добавлю в другое редактирование и объясню. – FF5Ninja

+0

Вы можете взглянуть на этот вопрос: http://stackoverflow.com/q/24948577/215552. Боюсь, я не очень много знаю об испытании углового вне контроллеров и директив. –

+0

ОК, спасибо! Может, кто-то еще будет знать :) – FF5Ninja

Смежные вопросы