2014-11-04 44 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"));这样测试正在加载所有正确的依赖关系。

相关问题