2016-12-03 4 views
1

조건을 기반으로 다른 인수로 다른 메서드 B를 호출하는 메서드 A를 테스트합니다. 그래서 나는 B가 그렇게 불려지는지 점검 할 수 있도록 B를 간첩하고 싶습니다. 하지만 스파이는 절대로 전화를받지 않습니다. A는 직접 B를 호출하기 때문에 Sinon Spy는 결코 호출되지 않습니다

import parent from '../something.js' 
describe('Testing A',() => { 
    it('should make proper calls to B',() => { 
     var spy = sinon.spy(parent, 'B') 
     parent.A() 
     expect(spy.calledOnce).to.be.true 
    }) 
}) 

및 테스트 기능 A가 단지

export const A =() => { 
    B() 
} 

테스트처럼 보인다 것, B의 스파이 버전이 호출되지 않습니다. A의 테스트 기능을 Sinon 버전의 B로 호출하려면 어떻게해야합니까?

+0

, 그것은 다른 모듈에서 가져온거야? – Hosar

+0

A와 B 모두 부모에게서 왔음 – Roy

답변

1

나에게 당신의 코드는 테스트 할 수 없습니다. 테스트중인 모듈을 블랙 박스로 취급하고 내부 회로를 조정하지 마십시오. 귀하의 경우에는 something.js 모듈 내부에있는 메소드를 간첩하려고합니다. 매개 변수로에

패스 B :

export const A = (B) => { 
    B(); 
} 

가 콜백 인 경우에는 시험에 매우 쉽습니다 :

B는 모듈 내부의에서 제공하지
import parent from '../something.js' 
describe('Testing A',() => { 
    it('should make proper calls to B',() => { 
     var B = sinon.spy(); 
     parent.A(B); 
     expect(B.calledOnce).to.be.true; 
    }) 
}) 
+0

이것은 가장 좋은 생각 인 것 같습니다. 감사. – Roy