我正在尝试用茉莉花单元测试规范文件测试一个AngularJS控制器。我的方法是在以下测试中使用$httpBacked:
describe('SubmissionsController', function() {
var minimal_mock_response = [ { id: 1 } ];
var scope, routeParams, $httpBackend;
beforeEach(module('submissionServices'));
beforeEach(inject(function($_httpBackend_, $rootScope) {
scope = $rootScope.$new();
$httpBackend = $_httpBackend_;
$httpBackend.expectGET('/submissions').respond(minimal_mock_response);
routeParams = {};
}));
it('passes a trivial test', function() {
expect(true).toBe(true);
});
});我插入expect(true).toBe(true)只是为了让测试执行并失败,即使它没有触及角度控制器。当我尝试使用茉莉花无头webkit运行测试时,我会收到以下错误:
jasmine-headless-webkit spec/javascripts/SubmissionsControllerSpec.js
Running Jasmine specs...
F
FAIL: 1 test, 1 failure, 0.011 secs.
Submissions controllers SubmissionsController passes a trivial test. (XXX/spec/javascripts/SubmissionsControllerSpec.js:18)
Error: Unknown provider: $_httpBackend_Provider <- $_httpBackend_
Test ordering seed: --seed 9254 ,对于如何纠正这个错误并执行简单的测试,有什么提示吗?
发布于 2012-10-23 22:31:51
我相信这是因为你注射了错误的服务。它不知道$_httpBackend_是什么。你应该可以这么做:
beforeEach(inject(function($httpBackend, $rootScope) {
scope = $rootScope.$new();
$httpBackend.expectGET('/submissions').respond(minimal_mock_response);
routeParams = {};
}));如果您想只获得一次对$httpBackend服务的引用并将其存储为$httpBackend,那么ghiden's answer就是最好的选择。
发布于 2013-03-07 02:47:39
在服务名称中加上下划线有一些好处。
从您的代码中,我可以看到您可能希望保存对$httpBackend的引用。这就是你想要做的。下划线的位置是一次取消。
beforeEach(inject(function(_$httpBackend_, $rootScope) {
scope = $rootScope.$new();
$httpBackend = _$httpBackend_;
...角足够聪明,可以删除下划线并将$httpBackend返回给您,并且您可以将它保存到您自己的$httpBackend中。
https://stackoverflow.com/questions/13039728
复制相似问题