7

$ httpBackendをスタブした後、期待した結果を返すことができないようです。また、テストの何が問題になっているのかわかりません。この失敗した最小限の例を見てください。

デモとのリンク

http://jsfiddle.net/paos/kTNF5/

ジャスミン出力

query() Expected [ ] to equal [ { hello : 'world' } ].

コード

依存リソース
<script src="https://raw.github.com/pivotal/jasmine/master/lib/jasmine-core/jasmine.js"></script>
<script src="https://raw.github.com/pivotal/jasmine/master/lib/jasmine-core/jasmine-html.js"></script>

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular-resource.min.js"></script>
<script src="http://code.angularjs.org/1.0.1/angular-mocks-1.0.1.js"></script>
javascriptをテストする
var mod = angular.module('mod', ['ngResource']);                                                                                                                               

mod.factory('Brief', function($resource) {
   var Brief = $resource('http://some_test/:id');                                                                                                                              
   return Brief;                                                                                                                                                               
});                                                                                                                                                                            

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

    inject(function($injector) {
        resource = $injector.get('$resource');                                                                                                                                 
        $httpBackend = $injector.get('$httpBackend');                                                                                                                          
        Brief = $injector.get('Brief');                                                                                                                                        
    });                                                                                                                                                                        

});                                                                                                                                                                            

afterEach(function() {
    $httpBackend.verifyNoOutstandingExpectation();                                                                                                                             
    $httpBackend.verifyNoOutstandingRequest();                                                                                                                                 
});                                                                                                                                                                            

describe("Brief", function() {
    it("query()", function() {
        var getRequest = 'http://some_test';                                                                                                                                   
        var fakeGetResponse = [{
            "hello": "world"}];                                                                                                                                                

        $httpBackend.when('GET', getRequest).respond(fakeGetResponse);                                                                                                         

        var briefs = Brief.query();                                                                                                                                            
        expect(briefs).toEqual(fakeGetResponse);                                                                                                                               
        $httpBackend.flush();                                                                                                                                                  
    });                                                                                                                                                                        
});                                                                                                                                                                            


// KICK OFF JASMINE
var jasmineEnv = jasmine.getEnv();                                                                                                                                             
var trivialReporter = new jasmine.TrivialReporter();                                                                                                                           

jasmineEnv.addReporter(trivialReporter);                                                                                                                                       

jasmineEnv.specFilter = function(spec) {
    return trivialReporter.specFilter(spec);                                                                                                                                   
};                                                                                                                                                                             

jasmineEnv.execute();​               

ありがとう!

4

1 に答える 1

12

あなたはほとんどそこにいましたが、それでもあなたのテストには2つの問題がありました:

  • $httpBackendがフラッシュされる前に、期待値が確認されました。$httpBackend.flush();着信応答をシミュレートするのは
  • あなたの期待では、オブジェクトインスタンス(およびそれらの値ではない)を比較していましたが、AngularJSはhttps://stackoverflow.com/a/11966512/1418796$resourceで説明されているように新しい配列を作成します。参照ではなく、オブジェクトの値を比較する必要があります。そのための1つの方法は次のとおりです。expect(angular.equals(briefs, fakeGetResponse)).toBeTruthy();

最後に、テストに合格したjsFiddleがあります:http://jsfiddle.net/VFqFU/

于 2012-12-02T09:29:34.000 に答える