2016-12-05 1 views
1

나는 약속을 되풀이하는 데이터베이스 호출을 모의하고 싶다. 그런 다음 정확한 인수로 호출되는지 여부를 확인하려고합니다. 나는 내가 실패하려고 할 때 다음이 통과지고 적절한 formattedData을 주면 내가 dbMock.withExactArgs(formattedData)약속을 반환하고 정확한 인수로 확인하는 함수를 모의하는 법

를 사용할 때

func(data) { 
    let formattedData = formatData(data); 
    return DbClient.saveData(formattedData).then(() => { 
     return { "ok": true } 
    }).catch(() => { 
     return { "ok": false } 
    }); 
} 

내 테스트 케이스는 약속이 해결되지

it("", (done) => { 
    let dbMock = sinon.mock(DbClient).expects("saveData"); 
    dbMock.returns(Promise.resolve({ "ok": true })); 
    dbMock.withExactArgs(formattedData); 
    func(data).then(resp => { 
     try{ 
     dbMock.verify(); 
     expect(resp).to.deep.equal({ "ok": true }); 
     done(); 
     } catch(err) { 
     done(err); 
     } 
    }) 
}); 

입니다 formattedData 대신 다른 args로 테스트하면 약속이 해결되지 않으므로이 오류가 발생합니다.

Error: timeout of 3000ms exceeded. Ensure the done() callback is being called in this test.

** 모의 테스트에서 약속이 해결되었으므로 dbMock.withExactArgs(formattedData) 테스트를 통과하면 ** 통과합니다.

답변

0

코드를 사용하고 설명에 따라 코드를 추가하여 설명하는 내용을 복제했습니다. 표시하는 코드의 유일한 문제점은 func이 약속을 반환하지 않는다는 것입니다. 당신이 필요합니다 :

function func(data) { 
    let formattedData = formatData(data); 
    return DbClient.saveData(formattedData).then(() => { 
     return { "ok": true } 
    }).catch(() => { 
     return { "ok": false } 
    }); 
} 
+0

사실 내 func는 약속 [지금 업데이트]에서 언급하는 것을 잊었습니다. 그러나 여전히 나는 같은 문제를 겪고있다. 그것은 문제에서 언급 한대로 해결하거나 거부하겠다는 약속을 기다리고있다. –

관련 문제