首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS测试错误:未知提供者:$_httpBackend_Provider <- $_httpBackend_

AngularJS测试错误:未知提供者:$_httpBackend_Provider <- $_httpBackend_
EN

Stack Overflow用户
提问于 2012-10-23 21:39:19
回答 2查看 8.4K关注 0票数 5

我正在尝试用茉莉花单元测试规范文件测试一个AngularJS控制器。我的方法是在以下测试中使用$httpBacked:

代码语言:javascript
复制
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运行测试时,我会收到以下错误:

代码语言:javascript
复制
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 

,对于如何纠正这个错误并执行简单的测试,有什么提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-23 22:31:51

我相信这是因为你注射了错误的服务。它不知道$_httpBackend_是什么。你应该可以这么做:

代码语言:javascript
复制
beforeEach(inject(function($httpBackend, $rootScope) {
    scope = $rootScope.$new();  
    $httpBackend.expectGET('/submissions').respond(minimal_mock_response);
    routeParams = {};
}));

如果您想只获得一次对$httpBackend服务的引用并将其存储为$httpBackend,那么ghiden's answer就是最好的选择。

票数 1
EN

Stack Overflow用户

发布于 2013-03-07 02:47:39

在服务名称中加上下划线有一些好处。

从您的代码中,我可以看到您可能希望保存对$httpBackend的引用。这就是你想要做的。下划线的位置是一次取消。

代码语言:javascript
复制
beforeEach(inject(function(_$httpBackend_, $rootScope) {
    scope = $rootScope.$new();  
    $httpBackend = _$httpBackend_;
    ...

角足够聪明,可以删除下划线并将$httpBackend返回给您,并且您可以将它保存到您自己的$httpBackend中。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13039728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档