2014-04-18 7 views
0

내 함수 getLink (rel)는 테스트 환경에없는 함수를 호출합니다.Jasmine.js 정의되지 않은 함수를 호출하는 함수를 단위 테스트하는 방법은 무엇입니까?

getLink: function(rel) { 
    var schemaLink = null; 
    var schemaLinks = this.collection.getItemSchema().links; 
    schemaLinks.forEach(function(link) { 
     if(link.rel === rel) { 
      schemaLink = link; 
      return false; 
     } 
    }); 
    return schemaLink; 
}, 

this.collection이 존재하지 않으며 현재 테스트중인 개체를 격리하려는 것처럼 테스트하지 않을 것입니다. Jasmine 2.0을 사용하면이 기능을 간첩 (또는 스텁, 할 일이 무엇이든간에 스텁이라고 생각합니까)?

답변

0

call 방법을 사용하여 스파이 개체의 컨텍스트에서 함수를 호출 할 수 있습니다. 그러면 다음과 같이 표시됩니다.

describe('getLink()', function(){ 
    var result, fooLink, barLink, fakeContext; 
    beforeEach(function(){ 
    fakeContext = { 
     collection: jasmine.createSpyObj('collection', ['getItemSchema']); 
    }; 

    fooLink = {rel: 'foo'}; 
    barLink = {rel: 'bar'}; 
    fakeContext.collection.getItemSchema.andReturn([fooLink, barLink]); 
    }); 

    desctibe('when schemaLink exists', function(){ 
    beforeEach(function(){ 
     result = getLink.call(fakeContext, 'foo') 
    }); 

    it('calls getItemSchame on collection', function(){ 
     expect(fakeContext.collection.getItemSchame).toHaveBeenCalledWith(); 
    }); 

    it('returns fooLink', function(){ 
     expect(result).toBe(fooLink); 
    }); 
    }); 

    desctibe('when schemaLink does not exist', function(){ 
    ... 
    }); 
});