함수가 정의된 동일한 모듈에서 호출된 함수를 스텁하는 방법을 찾을 수 없습니다(스텁이 작동하지 않는 것 같습니다). 예는 다음과 같습니다.
myModule.js:
으아악myModule.test.js:
으아악이것은 (거의) 스텁이 불가능한 Java 정적 함수를 생각나게 합니다.
내가 원하는 것을 달성하는 방법을 알고 있나요? 나는 OOP를 사용하지 않기 때문에 다른 모듈에서 foo
会起作用,但这不是我在这里想要做的。我还知道,在 bar
方法中使用关键字 this
调用 foo
也会起作用,我对在这种情况下使用 ̀this
를 추출하는 것이 혼란스럽다는 것을 알고 있습니다.
저는
으아아아exports
을 사용하는 것이 약간 마술적이기 때문에(예를 들어 Typescript로 코딩할 때 직접 사용하지 않음) 사용하기가 조금 조심스럽습니다. 그래서 대안 솔루션을 제안하고 싶었지만 안타깝게도 여전히 소스 코드를 수정해야 합니다. 스텁하려는 함수를 객체로 감싸면 됩니다.및
sinon.stub(fooWrapper, 'foo')
. 단지 테스트를 위해 이렇게 래핑해야 한다는 것은 약간 아쉽지만, 적어도 Typescript에서는 명시적이고 유형이 안전합니다(입력이any
인sinon.stub(fooWrapper, 'foo')
。只为了测试而必须这样包装有点遗憾,但至少它在 Typescript 中是显式的且类型安全的(与输入为any
的exports
와는 대조적).방금 테스트해봤습니다. 그것은 매력처럼 작동합니다.
으아아아실행할 때
sinon.stub(myModule, 'foo').returns('foo2')
时,sinon
会存根导出
对象的foo
并不是myModule.js
中实际的foo
函数...正如你必须知道的那样,foo
是可从模块外部访问。因此,当您设置exports.foo
时,导出的对象exports.foo
会存储foo
的 ref。当您调用sinon.stub(myModule, 'foo').returns('foo2')
时,sinon
将存根exports.foo
并不是实际的foo
이 말이 이해되길 바랍니다!