0

$get で $resource を呼び出す、完全に機能するサービス (実際にはプロバイダー) があります。単体テストを試みて、httpBackend を使用して応答をモックします。サービスをテストに挿入します。リソースが呼び出されます。httpBackend を flush() しましたが、success コールバックが呼び出される代わりに、ステータス 200 を指定したにもかかわらず、エラー コールバックがステータス 500 で呼び出されます。これはなぜですか?

サービス:

angular.module('myApp').provider('myData', function() {
    var myData = {empty : true};
    var called = false;
    var success = false;

    var convertDataModel = function(data) {
        // asigns data to properties of myData
    }

    this.$get = ['$resource', function($resource) {
        if (!called && !success) {
            called = true;
            console.log("call resource")
            $resource("/path", {}, {}).get({},
            function(data, status) { // success
                console.log("success!");
                success = true;
                convertDataModel(data);
                myData.empty = false;
            },
            function() { // error
                console.log("error!");
                if (!success) {
                    called = false;
                }
            });
        }
        return myData;
    }];
});

私の単体テスト:

var myData, httpBackend;

beforeEach(function() {
    module('myApp');

    inject(function ($httpBackend, _myData_) {
        myData = _myData_;

        httpBackend = $httpBackend;
        $httpBackend.expectGET("/path").respond(200, {facts: true});

    });
});

it("should get and inject the data model", function() {

    expect(myData.empty).toBe(true);
    console.log("flush!");
    httpBackend.flush();
    expect(myData.empty).toBe(false);
    expect(myData.facts).toBe(true);
});

最後の 2 つの期待は失敗し、「エラー!」となります。が記録されます。ステータス コード 500 を取得していますが、それがどこから来ているのかわかりません。200 を指定しました。エラー コールバックは正しいデータを受け取りますが、ステータス コードが変更されています。何が原因で、どうすれば修正できますか?

4

0 に答える 0