2016-11-28 2 views
0

일부 코드를 테스트하고 있지만 sinon과 관련된 문제가 있습니다. 것은 내 함수 중 하나가 매개 변수로 함수를 취하고 그것을 조롱하는 방법을 찾지 못했다는 것입니다.함수 인 함수 인수를 테스트하십시오.

은 일반적으로 당신이 뭔가를 할 :

var get = sinon.stub($, 'get') 

을 그리고 나중에 사용 후 $ 갔지 :

function getUsers(usersPromise) { 
    const config = { date: new Date() }; 
    return usersPromise(config) 
     .then(function (data) { 
      // Do stuff 
     }) 
} 

내가하고 싶은 다음과 같이

sinon.assert.calledWith(get, expectedObject); 

내 코드입니다 사용자를 조롱 할 수있는 것입니다 .Promise. 그래서 나는 그것이 올바른 설정 객체 (나는 많은 값을 생략했다)로 불려지는지 확인한 다음 .then 함수에서 어떤 것들을 주장한다.

sinon.stub (usersPromise)가 작동하지 않으므로 조금 잃어 버렸습니다.

답변

0

가 당신에게 완벽한 솔루션을 제공 할 수있는 충분한 정보가 아니지만, 당신이 먼저 get에 대한 스텁을 만들 .then

var stubThen = sinon.stub(); 

에 대한 스텁을 만들려면 및 반환 된 객체의 속성으로 stubThen을 가지고있는 것처럼 보인다 .

var stubGet = sinon.stub(); 
stubGet.returns({then: stubThen}); 

그런 다음 getUsers에 코드 패스 stubGet을 테스트하고 그에 따라 확인에.

0

내가 원하는 것은 사용자 모의 수 있습니다.

TDD를 준수한 결과 중 하나는 분리되고 테스트 가능한 블록으로 코드를 작성해야한다는 것입니다. 이는 전달 된 함수 나 인수의 개별 라인에 대한 테스트를 수행 할 수 없다는 직접적인 결과입니다.

var usersPromise = function(){}; 
function getUsers(usersPromise) {}; 

지금 당신이 usersPromise 당신이 getUsers를 호출하기 전에 그것을 밖으로 스텁을 포함하여 테스트 할 수 있습니다 고립 된 블록을 만든 : 귀하의 경우에는이 솔루션은 코드이 방법을 구성하는 것입니다.

+0

나는 이미 그렇게하고 있습니다. 문제는 getUsers (옵션 객체에 무엇이 있는지 말하는 것) 내에 몇 가지 내용을 명시해야한다는 것이며, 인수를 스텁하고 호출 된 내용을 확인하는 것이 가장 좋습니다. – kjonsson

+0

@kjonsson :'getUsers'에서 주장 할 필요가있는 것들은 무엇입니까? 질문에 포함하십시오. – rabbitco

관련 문제