1
我有對userService
依賴它來自不同的模塊茉莉花和AngularJS - 單元測試嘲笑依賴
我試圖寫一個單元測試,檢查userService
的性質的AuthService
我已經嘲笑並且在我的測試規範中包含使用$ provide服務。
beforeEach(function() {
module('app.services');
//Need to provide userService since it lives in a different module
module(function ($provide) {
$provide.value('userService', function(){
return {
userLoggedIn: false
}
});
});
});
//Question - will injecting _userService_ pick up the mocked instance from above?
beforeEach(inject(function(_AuthService_, _userService_) {
authService = _AuthService_;
userService = _userService_;
}));
describe('some text', function() {
it('should make a get request to check the users token', function() {
$httpBackend.expectGET('/auth/checktoken').respond({});
authService.hasAccessToken();
$httpBackend.flush();
});
it('should set userService.userLoggedIn to be true', function() {
expect(userService.userLoggedIn).toBeTruthy();
});
});
我對我的用戶服務的期望失敗,因爲它回來爲未定義。我需要做什麼才能測試我的嘲笑userService
?
感謝
UPDATE
確定這樣的基礎上的意見,我可以得到它通過組織我的測試中,像這樣
describe('hasAccessToken', function() {
beforeEach(function(){
authService.hasAccessToken();
});
it('should make a get request to catalogues', function() {
$httpBackend.expectGET('/auth/checktoken').respond({});
$httpBackend.flush();
});
it('should set userService.userLoggedIn to be true', function() {
$httpBackend.expectGET('/auth/checktoken').respond({});
$httpBackend.flush();
expect(userService.userLoggedIn).toBeTruthy();
});
});
通過正如你可以看到我正在努力分別爲expectGET和userService編寫測試,這是正確的嗎?只是似乎很詳細?
是注入authService的行爲足以將userLoggedIn設置爲true,還是缺少呼叫?類似於authService.login(user); –
對不起,我更新了我的代碼片段,因此有一個早期測試調用'authService.hasAccessToken()'將'userService.userLoggedIn'設置爲true – mindparse
beforeEach方法在每次測試之前運行,並且如您所知重置userService的狀態。您可以將調用hasAccessToken放入beforeEach方法,或者根據您的喜好在每個測試中調用它。 –