我只是将 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。具体来说,它打破了 else/redirectTo 语句。如果我注释掉该部分,则业力/茉莉花测试可以正常工作。
$routeProvider
.when('/home', angularAMD.route({
templateUrl: 'home/home.html',
controller: ''
}))
.otherwise({
redirectTo: '/home'
});
请注意,我正在使用 angularAMD(用于延迟加载),但即使我重写该部分以仅使用 {} 而不使用 angularAMD.route(),它仍然会引发相同的错误。IE:
$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 搜索结果中找到自己的,请查看以下内容:post 1、post 2。
[编辑:]无法让任何这些解决方案与 angularAMD 一起使用。有什么建议么?