2013-09-30 8 views
6

В моей главной describe я следующие:Mocking Печенье с угловыми

beforeEach(inject(function(...) { 
    var mockCookieService = { 
     _cookies: {}, 
     get: function(key) { 
      return this._cookies[key]; 
     }, 
     put: function(key, value) { 
      this._cookies[key] = value; 
     } 
    } 

    cookieService = mockCookieService; 

    mainCtrl = $controller('MainCtrl', { 
     ... 
     $cookieStore: cookieService 
    } 
} 

Позже я хочу, чтобы проверить, как контроллер считает, если куки уже существует, поэтому гнездо следующие описания:

describe('If the cookie already exists', function() { 
    beforeEach(function() { 
     cookieService.put('myUUID', 'TEST'); 
    }); 

    it('Should do not retrieve UUID from server', function() { 
     expect(userService.getNewUUID).not.toHaveBeenCalled(); 
    }); 
}); 

Однако, когда я вношу изменения в cookieService, он не сохраняется в создаваемом контроллере. Я принимаю неправильный подход?

Спасибо!

EDIT: Обновлен код тестирования и это, как я использую $ CookieStore:

var app = angular.module('MyApp', ['UserService', 'ngCookies']); 

app.controller('MainCtrl', function ($scope, UserService, $cookieStore) { 
var uuid = $cookieStore.get('myUUID'); 

if (typeof uuid == 'undefined') { 
    UserService.getNewUUID().$then(function(response) { 
     uuid = response.data.uuid; 
     $cookieStore.put('myUUID', uuid); 
    }); 
} 

});

+0

Можете ли вы показать, как $ cookieStore используется в вашем контроллере? И как вы проверяете контроллер? –

+0

Обновлено, дайте мне знать, если вам нужно больше тестового кода. – grivescorbett

+0

Что вы подразумеваете под словом «он не остается в контроллере»? Вы хотите сказать, что ваш контроллер не использует макет? Или вы имеете в виду, когда вы вызываете '$ cookieStore.get()', вы не можете получить ожидаемое значение обратно? –

ответ

1

В ваших модульных тестах не обязательно создавать mock $ cookieStore и, по сути, повторно выполнять его функциональные возможности. Вы можете использовать функцию Jazzine spyOn для создания объекта-шпиона и возвращаемых значений.

Создание объекта стаб

var cookieStoreStub = {}; 

Настройте свой объект шпионской перед созданием контроллер

spyOn(cookieStoreStub, 'get').and.returnValue('TEST'); //Valid syntax in Jasmine 2.0+. 1.3 uses andReturnValue() 

mainCtrl = $controller('MainCtrl', { 
... 
$cookieStore: cookieStoreStub 
} 

тесты Запись единицы для сценария, в котором печенье доступен

describe('If the cookie already exists', function() { 
    it('Should not retrieve UUID from server', function() { 
     console.log(cookieStore.get('myUUID')); //Returns TEST, regardless of 'key' 
     expect(userService.getNewUUID).not.toHaveBeenCalled(); 
    }); 
}); 

Примечание : Если вы хотите протестировать несколько сценариев cookieStore.get(), вы можете захотеть переместите создание контроллера в beforeEach() внутри блока describe(). Это позволяет вам вызвать spyOn() и вернуть значение, соответствующее описательному блоку.

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