5

Jasmine 単体テスト仕様ファイルを使用して 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) を挿入しました。jasmine-headless-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 

このエラーを修正して簡単なテストを実行する方法についてのヒントはありますか?

4

2 に答える 2

30

サービス名をアンダースコアで囲むと、いくつかの利点があります。

コードから、おそらく $httpBackend への参照を保存したかったことがわかります。これがあなたがやりたかった方法です。アンダースコアの配置はワンオフでした。

beforeEach(inject(function(_$httpBackend_, $rootScope) {
    scope = $rootScope.$new();  
    $httpBackend = _$httpBackend_;
    ...

Angular はアンダースコアを削除して $httpBackend を返します。それを独自の $httpBackend に保存できます。

于 2013-03-07T02:47:39.490 に答える
1

これは、間違ったサービスを注入しているためだと思います。それは何であるかを知りません$_httpBackend_。あなたはこれをすることができるはずです:

beforeEach(inject(function($httpBackend, $rootScope) {
    scope = $rootScope.$new();  
    $httpBackend.expectGET('/submissions').respond(minimal_mock_response);
    routeParams = {};
}));

$httpBackendサービスへの参照を一度取得してそれを保存したい場合は$httpBackendghidenの答えが最適です。

于 2012-10-23T22:31:51.967 に答える