Ask*_*mov 33 jasmine angularjs karma-runner
我有一个像这样编码的Jasmine测试:
it ("should send correct message to server to get data, and correctly set up scope when receiving it", function(){
$httpBackend.when('GET', 'https://localhost:44300/api/projectconfiguration/12').respond(fakedDtoBase);
$routeParams.projectId=fakeId; // user asks for editing project
scope.$apply(function(){
var controller=controllerToTest(); // so controller gets data when it is created
});
expect(scope.projectData).toEqual(fakedDtoBase);
});
Run Code Online (Sandbox Code Playgroud)
它有点工作,但我收到错误:
Error: Unexpected request: GET views/core/main/main.html
No more request expected
at $httpBackend (C:/SVN/src/ClientApp/client/bower_components/angular-mocks/angular-mocks.js:1207:9)
at sendReq (C:/SVN/src/ClientApp/client/bower_components/angular/angular.js:7800:9)
at $http.serverRequest (C:/SVN/src/ClientApp/client/bower_components/angular/angular.js:7534:16)
(more stack trace)....
Run Code Online (Sandbox Code Playgroud)
我意识到我可以嘲笑其他所有电话.但是,让我说我不关心我的测试想要加载什么,因为它可能会调用其他一些东西.我怎样才能确保所有其他请求只是"无声地发生",也许只为其他一切提供一个虚拟响应?
Pri*_*osK 47
您的测试失败,因为您发出了未指定的请求.
尝试添加:
$httpBackend.when('GET', 'views/core/main/main.html').respond(fakedMainResponse);
Run Code Online (Sandbox Code Playgroud)
当然你也应该定义fakedMainResponse.
请查看文档(请求期望与后端定义部分),其中说:
请求期望提供了一种方法,可以对应用程序发出的请求进行断言,并为这些请求定义响应. 如果未作出预期请求或以错误的顺序进行,则测试将失败.
第二个参数$httpBackend.when实际上是一个RegExp.因此,如果您提供的RegExp内容与其他所有请求相符,则应该可以使用.
le0*_*iaz 15
对于那些使用httpBackend在EndToEnd测试中模拟http调用或仅模拟应用程序的整个http调用的人,解决方案是在应用程序配置部分添加以下代码(根据模板的位置更改正则表达式):
$httpBackend.whenGET(/^\/templates\//).passThrough();
Run Code Online (Sandbox Code Playgroud)
参考:https://docs.angularjs.org/api/ngMockE2E/service/ $ httpBackend
使用angularjs 1.4测试以在集成ui-router时修复类似的问题
| 归档时间: |
|
| 查看次数: |
55559 次 |
| 最近记录: |