2017-12-09 28 views
0

작은 문제로 누군가 나를 도울 수 있기를 희망합니다. 내가하려고 무엇을Sinon JS Stubbing/Mocking undefined properties

var self = this; 


self.test = function() { 
    return person.myId(); 
}; 


if (typeof module !== "undefined" && module.hasOwnProperty("exports")) { 
    module.exports = self; 
} 


return self; 

은 다음과 같습니다 :

it('Basic stub test', function() { 
    sinon.stub(code, 'person.myId').return("1234"); 
    assert(code.test(), "1234"); 
}); 
나는 간단한 테스트 케이스로 이것을 시도하고, 알려진 값을 함수 내에서 살고 정의되지 않은 속성을 스텁 반환하는 것을 시도하고있다

위의 내용이 person.myId()에 대한 호출을 스텁 (stub)하기를 바랐지만, 다음과 같은 오류가 발생했습니다. 존재하지 않는 속성 person.myId를 스텁 할 수 없습니다.

우리는 의존성 주입을 처리하는 소프트웨어를 사용하지만 소프트웨어 외부에서 격리 된 단위 테스트를 작성하려고합니다.

누구든지 이런 종류의 것을 시도한 적이 있습니까? 내가 할 수없는 일을하려고합니까?

아무도 도와 줄 수있는 지원/도움에 감사드립니다.

+0

어떻게 사람이 코드에 정의? –

+0

사람은 런타임에 사용자 지정 소프트웨어를 사용하여 주입되어 스크립트에서 사용 가능한 개체입니다. –

+0

위의 코드에 추가 할 수 있습니까? –

답변

0

나는 그래서 여기에 중간 접지 대답, 의존성 주입 소프트웨어가하는 마법의 종류를 모르겠어요.

특정 질문에 적합하지만 테스트하려는 코드를 변경하는 경우 코드 냄새가 날 수 있으므로 그다지 이상적이지 않습니다.

나는 또한 당신이 before & afterEach 기능을 제공 mocha 같은 것을 사용하고 있으리라 믿고있어.


var sandbox = sinon.createSandbox(); 

before(function() { 
    var person = { 
    myId:() => console.log('myId no op'), 
    }; 

    code.person = person; 
} 

it('Basic stub test', function() { 
    sandbox.stub(code.person, 'myId').returns('1234'); 
    assert(code.test(), '1234'); 
}); 

afterEach(function() { 
    sandbox.restore(); 
}); 

문서 링크 : (sandbox의 사용이 엄격하게 여기 필요하지 않지만) http://sinonjs.org/releases/v4.1.3/sandbox/