2012-10-23 12 views
5

ジャスミンユニットテスト仕様ファイルでAngularJSコントローラをテストしようとしています。

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); 
    }); 
}); 

私はそれが角に触れていないにもかかわらず、ただ実行し、失敗するテストを得ることを期待(真).toBe(true)を挿入:私のアプローチは、次のテストでは、$ httpBackedを使用することですコントローラ。私はジャスミン・ヘッドレス-の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 

は、私はこのエラーを修正し、些細なテストを実行させることができる方法上の任意のヒントがありますか?

答えて

1

私はあなたが間違ったサービスを注入していると思います。それは$_httpBackend_が何であるか分からない。あなたはこれを行うことができるようになります。

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

一度$httpBackendサービスへの参照を取得し、$httpBackendとして、ghiden's answerが進むべき道であることを保存したい場合。

+0

問題を修正しました。ありがとうございます! – oxirane

+4

唯一の問題はタイプミスでした。 $ _httpBackend_ではなく\ _ $ httpBackend \ _になっているはずです。以下の答えはこれよりも好ましい。 – user553086

+0

@リチャード・モーガンあなたが正しいです。私は私の答えを更新しました。 +1からghiden – dnc253

30

サービス名にアンダースコアを付けると、いくつかの利点があります。

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

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

角度は、アンダースコアを除去するのに十分スマートですし、あなたに戻って$ httpBackendを返し、あなたがあなた自身の$ httpBackendに保存することができます。

+2

これは、次のようにマークする必要があります。正しかったり、あなたのテストの中でおなじみの "$ httpBackend"という名前でサービスを使用することはできません。 –

関連する問題