2016-06-28 8 views
0

ジャスミンとカルマを使用して角度サービスのテストを作成しようとしています。私はスペックについては、以下のファイルを使用してそれをtesitngい角度サービステストで必要な応答が返されない

angular.module('omdb', []) 
 
    .factory('myservice', MyService); 
 
MyService.$inject = ['$http']; 
 

 
function MyService($http) { 
 
    var vm = this; 
 
    var service = {}; 
 
    service.getData = function() { 
 
    return $http.get('omdb/mydata.json').then(function(response) { 
 
     return response.data; 
 
    }); 
 
    }; 
 
    return service; 
 
};

として:私は私のサービスコールについて、次のコードを持っている

基本的に

describe('myservice', function() { 
 
    var mockservicedata = [{ 
 
    "name": "value1", 
 
    "id": "1" 
 
    }, { 
 
    "name": "value2", 
 
    "id": "2" 
 
    }, { 
 
    "name": "value3", 
 
    "id": "3" 
 
    }]; 
 

 
    var myservice = {}; 
 
    beforeEach(module('omdb')); 
 
    beforeEach(inject(function(_myservice_) { 
 
    myservice = _myservice_; 
 
    })); 
 

 
    it('should return search myservice data', function() { 
 
    expect(myservice.getData()).toEqual(mockservicedata); 
 
    }); 
 
});

次のようなエラーが返されます:

Expected d({ $$state: Object({ status: 0 }) }) to equal [ Object({ name: 'value1', id: '1' }), Object({ name: 'value2', id: '2' }), Object({ name: 'value3', id: '3' }) ]. 

[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1482:17 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1452:14 
Env/[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:583:18  
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:324:29 [email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:533:16 
Expectation.prototype.wrapCompare/<@http://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1406:7 
@http://localhost:59239/movie-app/spec/omdb/myservice.spec.js:14:9 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1789:9 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1777:9 [email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1762:5 
Env/[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:627:7 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:353:5 executeNode/<[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:2360:32 [email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1819:9 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1774:9 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1762:5 
Env/[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:627:7 
executeNode/<[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:2345:13 [email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1819:9 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1774:9 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:1762:5 
Env/[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:627:7 
TreeProcessor/[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:2209:7 
Env/[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/jasmine.js:678:7 
[email protected]://localhost:59239/movie-app/lib/jasmine-2.3.4/boot.js:110:5 

なぜデータがテストに返されないのかわかりません。助けてください

答えて

1

myservice.getData()を呼び出すと、実際にあなたが期待しているデータを得ることはできません。

MyServiceからごgetData方法は$httpget方法に依存しているので、あなたはそれをからかった後、データが返されることを期待しなければなりません。

だからあなたのテストケースは次のようにする必要があります:

describe('myservice', function() { 
 
    var mockservicedata = [{ 
 
    "name": "value1", 
 
    "id": "1" 
 
    }, { 
 
    "name": "value2", 
 
    "id": "2" 
 
    }, { 
 
    "name": "value3", 
 
    "id": "3" 
 
    }]; 
 

 
    var myservice = {}; 
 
    beforeEach(module('omdb')); 
 
    beforeEach(inject(function(_myservice_, _$httpBackend_) { 
 
    myservice = _myservice_; 
 
    $httpBackend = _$httpBackend_; 
 

 
    $httpBackend.when('GET', "omdb/mydata.json").respond({ 
 
     status: 200, 
 
     data: mockservicedata 
 
    }); 
 
    })); 
 

 
    it('should return search myservice data', function() { 
 
    var response = myservice.getData() 
 
    response.then(function(response) { 
 
     expect(response.data).toEqual(mockservicedata); 
 
    }); 
 
    $httpBackend.flush(); 
 
    }); 
 
});

・ホープ、このことができます。

+0

私はそれを実行してみました。 http:// localhost:59239/movie-app/spec/omdb/myservice.spec.js(行14)に定義されていません。 私の仕様に追加するにはどうすればいいですか? 。テストを実行するために別のファイルを含める必要があります – manu

+0

申し訳ありませんが、応答から値を取得する方法についての部分を追加するのを忘れていました。助けてくれてありがとう – manu

0

getData()はデータを返すことはなく、代わりにpromiseオブジェクトを返します。 それをテストする場合は、まずサービスのためにデータをモックし、それを呼び出して成功ハンドラの結果と照合する必要があります。

コードを以下に添付されています

describe('myservice', function() { 
    var mockservicedata = [{ 
    "name": "value1", 
    "id": "1" 
    }, { 
    "name": "value2", 
    "id": "2" 
    }, { 
    "name": "value3", 
    "id": "3" 
    }]; 

    var myservice, httpBackend; 
    beforeEach(module('omdb')); 
    beforeEach(inject(function(_myservice_, $httpBackend) { 
    myservice = _myservice_; 
    httpBackend = $httpBackend; 
    })); 

    it('should return search myservice data', function() { 
    httpBackend.when("GET", "omdb/mydata.json").respond(mockservicedata); 

    var promise = myservice.getData(); 
    promise.then(function(response) { 
     expect(response.data).toEqual(mockservicedata); 
    }); 
    httpBackend.flush(); 
    }); 
}); 
関連する問題