我有一个茉莉花测试,其编码如下:
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); });
确实可行,但出现错误:
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)....
我确实意识到我可以嘲笑其他所有电话。但是,可以说我不在乎我的测试还要加载什么,因为它可能会调用其他一些东西。我如何确保其他所有请求只是“默默发生”,也许对其他所有请求都提供一个虚拟响应?
测试失败,因为发出了您未指定的请求。
尝试添加:
$httpBackend.when('GET', 'views/core/main/main.html').respond(fakedMainResponse);
当然,您还应该定义fakedMainResponse。
fakedMainResponse
另请参阅文档(“要求期望与后端定义”部分),其中说:
请求期望提供了一种对应用程序提出的请求进行断言并定义这些请求的响应的方法。 如果未发出预期的请求或发出的请求顺序错误,则测试将失败。
的第二个参数$httpBackend.when实际上是RegExp。因此,如果您提供的RegExp内容将与所有其他请求匹配,那么它应该可以正常工作。
$httpBackend.when
RegExp