2016-04-05 7 views
3

(コンポーネントの)コントローラがURLにGETリクエストを送信していることをテストしたいと思います。私はそれがGETリクエストを取得していない場合

httpBackend.expectGET('/some/random/url'); 

は、HTTPのバックエンドをスパイと失敗するだろうと期待していたので、私は失敗し、次のスペックを期待していた。

describe('myApp', function() { 
    var httpBackend; 

    beforeEach(module('myApp')); 

    beforeEach(inject(function($httpBackend) { 
    httpBackend = $httpBackend; 
    })); 

    it('sends a GET request to /some/random/url', function() { 
    httpBackend.expectGET('/some/random/url'); 
    httpBackend.expect('GET', '/some/random/url'); 
    }); 

}); 

をしかし、これは通過しているようですこれに自明

Starting the Teaspoon server... 
Teaspoon running default suite at http://127.0.0.1:56255/teaspoon/default 
.. 

Finished in 0.01200 seconds 
2 examples, 0 failures 

angular.module('myApp', []); 

expectGETがやっていることを誤解していると思います。これは私がチェックしようとしていることを確認する方法ではありません。

答えて

1

私は通常、httpモックを扱うspec(テスト)ファイルに次のコードを追加します。これにより、コールがフラッシュされ、未処理の期待/要求がないことが確認されます。

afterEach(() => { 
    try { 
     $httpBackend.flush(); 
    } catch (e) { 
    } 
    $httpBackend.verifyNoOutstandingExpectation(); 
    $httpBackend.verifyNoOutstandingRequest(); 
}); 

これには、

describe('myApp', function() { 
    var httpBackend; 

    beforeEach(module('myApp')); 

    beforeEach(inject(function($httpBackend) { 
    httpBackend = $httpBackend; 
    })); 

    afterEach(() => { 
     try { 
      httpBackend.flush(); 
     } catch (e) { // entering here is a sign your unit test failed 
     } 
     httpBackend.verifyNoOutstandingExpectation(); 
     httpBackend.verifyNoOutstandingRequest(); 
    }); 

    it('sends a GET request to /some/random/url', function() { 
    httpBackend.expectGET('/some/random/url'); 
    httpBackend.expect('GET', '/some/random/url'); 
    }); 

}); 
+0

おかげのようにコードを変更します。 'httpBackend.verifyNoOutstandingExpectation();'は私が待っていたエラーを返します。 (したがって、明示的に要求されていない場合は、各仕様の後にフラッシュする必要があります。 – sunless

+0

@sunless - 'afterEach'を使用して、' it'の完了後にフラッシュする必要があります。私はそれがあなたのテストがどのように構造化されているかに依存していると思います。多くの呼び出しやネストされた '仕様'を変更する必要があります。私はそれのブロックごとに1つのコール/テストを好むので、afterEachはそのように私のために働く。 – Igor

0

httpBackendにflush()と電話するのを忘れました。それは、期待されるすべてのリクエストが受信されたことを確認するときです。