2014-11-04 42 views
1

我只是將ngMock包含到我的項目中,因爲我需要$ httpBackend。我有一幫業報/茉莉測試設置的,幷包括ngMock後,一切都因爲它會導致錯誤的突破:

PhantomJS 1.9.7 (Windows 7): Executed 0 of 41 SUCCESS (0 secs/0 secs) 
PhantomJS 1.9.7 (Windows 7) ERROR 
    Error: Unexpected request: GET home/home.html 
    No more request expected 
    at C:/dev/app/bower_components/angular-mocks/angular-mocks.js:1181 

看來,它不喜歡ngRoute/$ routeProvider。具體來說,它在其他方面/ redirectTo語句中斷。如果我註釋掉那部分,業力/茉莉花測試沒有錯誤地工作。

$routeProvider 
    .when('/home', angularAMD.route({ 
     templateUrl: 'home/home.html', 
     controller: '' 
    })) 
    .otherwise({ 
     redirectTo: '/home' 
    }); 

注意,我用的angularAMD(用於延遲加載),但即使我重寫部分只是{}無angularAMD.route()使用,但它仍然拋出了同樣的錯誤。即:

$routeProvider 
    .when('/home', { 
     templateUrl: 'home/home.html', 
     controller: '' 
    }) 
    .otherwise({ 
     redirectTo: '/home' 
    }); 

任何想法爲什麼ngMock不喜歡ngRoute?現在我創建了一個解決方法,在運行karma/jasmine測試時跳過$ routeProvider部分。但我試圖理解發生了什麼,我不應該在單元測試期間設置$ routeProvider(這是不好的做法)嗎?

[編輯::]問題似乎也出現在其他部分。我運行一個測試,包括加載模板的服務,而且還拋出一個錯誤:

Error: Unexpected request: GET components/modal/modal.html 
No more request expected 
    at $httpBackend (C:/dev/app/bower_components/angular-mocks/angular-mocks.js:1181) 

[編輯:]似乎拋出錯誤,當我打電話$httpBackend.flush();

[編輯:]偉大的,發現與問題相關的帖子。無法相信Google搜索時沒有顯示任何相關結果。 解決方案:如果您發現自己來自Google Results,請看看這些:post 1,post 2

[編輯::]無法使用angularAMD的任何解決方案。有什麼建議麼?

+0

您是否找到了解決方案?有完全相同的問題! – stianlp 2015-02-23 17:06:33

+0

@stianlip是的,你需要設置一個全面的漏斗所有未解決的模板:'$ httpBackend.whenGET(/ \。html $/g).respond(「」);'在我的測試中,我使用一個單獨的'app.js'文件來引導應用程序,該應用程序不聲明任何$ routeProvider配置。 – BuildTester1 2015-02-26 18:05:50

回答

0

我的問題是,我沒有加載應用程序的完整模塊(這是我與ngRoute關聯)。

在我User.tests.js文件,我不得不

beforeEach(module('App.services')); 

在我app.js文件我有:

App = angular.module("App", [ 
    "ngRoute" 
    "App.templates" 
    "App.filters" 
    "App.services" 
    "App.controllers" 
    "App.directives" 
    "ui.bootstrap" 
    ]); 

在我User.js服務,我其實是利用$route解決方案對我來說是將我的User.tests.js切換爲使用模擬模塊"App"-beforeEach(module("App"));這樣測試正在加載所有正確的依賴關係。

相關問題