2015-10-07 148 views
1

在我AngularJS(1.4.4)應用程序,我廠有:

(function() { 
    "use strict"; 

    angular 
     .module("app") 
     .factory("DeviceTypeService", DeviceTypeService); 

    function DeviceTypeService($window) { 

     function isTablet() { 
      var width = $window.innerWidth; 
      return width > 639; 
     } 

     return { 
      isTablet: isTablet 
     }; 
    } 

})(); 

我需要與茉莉它進行單元測試,在運行噶。我嘗試了不同的解決方案,但是我的測試每次都失敗。

我的一個解決方案:

'use strict'; 

describe('DeviceType Service', function(){ 
var mock_window, 
    sut; 

beforeEach(function(){ 
    module('app'); 
    mock_window = {innerWidth: 1000}; 

    module(function($provide){ 
     $provide.value('$window', mock_window); 
    }); 
}); 

beforeEach(inject(function(_DeviceTypeService_){ 
    sut = _DeviceTypeService_; 
})); 

it('isTablet() method shoul return "true" if $window.innerWidth > 639 px', function(){ 
    expect(sut.isTablet()).toBeTruthy(); 
    }); 
}); 

這個測試返回FAILED Expected false to be truthy。我幾乎試圖爲$window.innerWidth創建SPY,但它不起作用。

我使用: PhantomeJS(v 1.9.18)。 茉莉花(v 2.3.4)。 Karma(v 0.13.10)

請給我看看我的錯誤或給一些工作代碼一些參考。

+0

如何爲'$ window.innerWidth'創建一個間諜。它是一個對象而不是函數。茉莉花間諜只能在功能上工作。 –

回答

1

我還沒有設法弄清楚什麼是錯的,因爲當我嘗試你的例子時,它是完全正確的,測試通過。

我已將您的樣品放在jsfiddle - 您可以自己檢查:「運行」&在輸出中都是綠色的。

我說的唯一的事情是:

link to http://jasmine.github.io/2.3/lib/jasmine.js 
link to http://jasmine.github.io/2.3/lib/jasmine-html.js 
link to http://jasmine.github.io/2.3/lib/jasmine.css 
link to http://jasmine.github.io/2.3/lib/boot.js 
link to http://code.angularjs.org/1.4.4/angular.js 
link to http://code.angularjs.org/1.4.4/angular-mocks.js 

var myApp = angular.module('app', []); - before your code 

uninteresting copy of IsTablet - just to play with and see something red 

copied-pasted a simple Jasmine runner at the end of the file 

所以..這是肯定地說,沒有實際變化。

試一試的小提琴,以及是否有關於你的代碼沒有什麼重要的變化,檢查庫版本是相同的,請檢查您是否沒有忘記像角嘲笑

FYI:在首先,我沒有注意到你使用的版本,我測試了你的代碼1.2.9和茉莉花1.3 - 它的工作。當我更新小提琴使用角1.4.4和茉莉花1.3 - 它仍然工作。現在我更新到幾乎你的版本 - 1.4.4/2.3.0 - 仍然有效。我沒有找到任何2.3.4鏡子。

..所以,也許這是幻影的東西?但是這很奇怪,因爲它不應該對角度的$ window做任何特殊的處理。