2017-02-27 6 views
1

지금까지 sinon을 사용하여 내 nodeJS 코드에 포함 된 객체에서 함수 호출을 스텁 아웃했습니다. 내가 지금은 요구 사항을 포함하고 도서관은과 같이 호출 할 수있는 시나리오를 공격 한sinon을 사용하여 스터 빙 라이브러리 생성자 호출

var request = require('request'); 
//Somewhere further below in my tests: 
postStub = sinon.stub(request, 'post'); 

: 같은

예를 들어 내가 요청 라이브러리를 사용, 그래서 내 테스트에서 내가 밖으로 스텁 수 HTTP 호출 내 실제 코드 :

var archiver = require('archiver'); 
//Further below in actual code (express middleware) 
var zip = archiver('zip'); 
zip.pipe(res); 

나는 아카이버 라이브러리에 pipe() 호출을 스텁 할 수 있도록하려면,하지만 난 내가 먼저 생성자 호출 밖으로 스텁 필요가 있다고 생각 - archiver('zip')를?

나는 검색을했는데 sinon의 createStubInstance가 여기에 도움이 될 수 있다고 생각하지만 100 % 확실하지 않습니다.

누군가가 도움을 줄 수 있습니까? 감사합니다.

답변

0

그것은 꽤 아니지만 내가 한 일은 효과가있는 것 같습니다. stabbable 라이브러리 함수를 다른 내보낼 수있는 메서드로 래핑하십시오.

file.js

exports.originalMethod = function() { 
    var archiver = require('archiver'); 
    //Further below in actual code (express middleware) 
    var zip = exports.newArchiverMethod('zip'); 
    zip.pipe(res); 
} 
exports.newArchiverMethod = function(arg) { 
    return archiver(arg); 
} 

이 newArchiverMethod은 다음 스텁 수 있습니다. 이 새로운 내보낼 방법을 추가하고 불필요한 원본 파일의 혼란뿐만 아니라 비 검증 라인을 만들기 때문에

spec.js

archiverStub = sinon.stub(controller, 'newArchiverMethod'); 

그것은 완벽한 아니에요. 하지만이 한 줄을 지나서 긴 방법을 테스트 할 수 있습니다.