2017-05-17 6 views
0

sinon을 사용하여 제 기능을 사용하는 서비스를 모의하려고하는데, 을 내 함수에 넣으십시오..모의가 필요합니다.

서비스는 require

내 기능을 사용하여 획득은 다음과 같이이다 :

// something.js 
const service = require('./service'); 
module.exports = { 
    // do something using a service 
    doSomething: function (options) { 
     let results = []; 
     return service.foo(option.param) 
     // and return the value adding some logic 
     .then(function(resultFromService){ 
      // want to test this flag 
      if (options.someFlag) { 
       results = resultFromService; 
      } 
     }) 
     .then(function(){ 
      /// more existing code here 
      return results; 
     }); 
    } 
} 

내가 이런 service.foo 조롱하기 위해 노력하고있어 : 확인 후

const something = require('../../something.js'); 
const sinon = require('sinon'); 
... 
it('should doSomething by calling foo in the service', function(done) { 

    ///I'm getting this error here: Error: Trying to stub property 'foo' of undefined 
    sinon.stub(something.service , 'foo') 
    .returns(when(function() { 
     return ['bar', 'baz']; 
    })); 


    let promise = something.doSomething({param:'for service', someFlag:true}); 
}); 

을 그리고 내 doSomething 경우 메서드가 실제로 실행될 논리를 실행하고 있습니다.

내가 모의 서비스 및/또는 내 something 함수에서 변수를 범위로 지정된 개인 폐쇄로 정의되는 서비스에 대한 모의 기능을 삽입하려면 어떻게 Q..

답변

1

테스트에 service을 요구하고 직접 스텁해야한다고 생각합니다.

let service = require('../../service.js'); 
sinon.stub(service, 'foo') 
.returns(when(function() { 
     return ['bar', 'baz']; 
})); 
+0

것'doSomething' 사용을 사용하게? (시도) – OscarRyz

+0

예. 삽입 된 조롱 된 객체를 사용해야합니다. – JavaKungFu

0

나는 이제 mock-require

const mockRequire = require('mock-require'); 

it('do something', function(){ 
    mockRequire('./service', { 
     foo: function(p){ 
     return []; 
     } 
    }); 
    let something = require('./something.js); 
    // Now when it requires the service, it gets the mock instead 
    something.doSomething({flag:true, param:'a'}); 
    assert. etc. etc 
}));