2017-03-03 21 views
7

내 보낸 메서드를 아래 코드에서 단위 테스트하고 싶습니다. 반환 된 약속의 거부/해결을 제어하기 위해 개인 메서드에서 값을 조롱하고 싶습니다. client은 데이터베이스에 이미 연결되어있는 node-postgres 개체입니다.단위 테스트 모의를 사용하여 요청, 파이프 및 스트림을 사용하는 개인 메서드

은 내가 필요한 라이브러리를 스텁 proxyquire을 사용할 수 있습니다 알고 있지만 내가 어떻게 체인 방법 .on('error', ...), .pipe(stream).on('end', ...) 내가 반환 값을 제어 할 수 있도록 조롱 할 수 있습니다.

참고 표시된 내보내기 방법은 실제 항목을 단순화 한 것으로 importDomain을 내보낼 수 없습니다.

const copyFrom = require('pg-copy-streams').from 
const request = require('request') 
const Promise = require('bluebird') 

// private 
function importDomain (client, domain) { 
    return new Promise((resolve, reject) => { 
    let stream = client.query(copyFrom(`COPY ${domain.table} FROM STDIN;`)) 

    let req = request(`${domain.url}`) 
    req.on('error', reject) 
    req.pipe(stream) 
     .on('error', reject) 
     .on('end', resolve) 
    }) 
} 

// public 
module.exports = (client) => { 
    let domain = someFunctionReturningDomain() 
    importDomain(client, domain) 
} 

답변

1

importDomain 함수를 단위 테스트하려면 모의 요청을해야합니다. 그것은 귀하의 모듈에 필요하므로 정상적으로 작동하는지 테스트해야합니다.

매개 변수로 클라이언트를 제공했기 때문에. 쿼리 메서드와 반환 된 스트림은 이미 모듈에서 완전히 제어 할 수 있습니다.

단순히 req.pipe를 바꾸면 클라이언트가 만든 스트림에 전달할 내용을 제어 할 수 있습니다.

+0

.on()은 어떻게 테스트합니까? 어떻게 수행 할 수 있는지 보여주는 코드 샘플을보고 싶습니다. – Brian

+0

요청을 모의 할 때는 쓰기 가능한 스트림으로 구현하고 테스트하는 동안 데이터를 쓸 수 있습니다. http://stackoverflow.com/questions/33141012/how-to-mock-streams-in-nodejs를 참조하십시오. –