동일한 모듈에서 스텁 모듈 함수 호출
P粉596161915
P粉596161915 2023-11-03 13:47:45
0
2
727

함수가 정의된 동일한 모듈에서 호출된 함수를 스텁하는 방법을 찾을 수 없습니다(스텁이 작동하지 않는 것 같습니다). 예는 다음과 같습니다.

myModule.js:

으아악

myModule.test.js:

으아악

이것은 (거의) 스텁이 불가능한 Java 정적 함수를 생각나게 합니다.

내가 원하는 것을 달성하는 방법을 알고 있나요? 나는 OOP를 사용하지 않기 때문에 다른 모듈에서 foo 会起作用,但这不是我在这里想要做的。我还知道,在 bar 方法中使用关键字 this 调用 foo 也会起作用,我对在这种情况下使用 ̀this를 추출하는 것이 혼란스럽다는 것을 알고 있습니다.

P粉596161915
P粉596161915

모든 응답(2)
P粉099000044

저는 exports을 사용하는 것이 약간 마술적이기 때문에(예를 들어 Typescript로 코딩할 때 직접 사용하지 않음) 사용하기가 조금 조심스럽습니다. 그래서 대안 솔루션을 제안하고 싶었지만 안타깝게도 여전히 소스 코드를 수정해야 합니다. 스텁하려는 함수를 객체로 감싸면 됩니다.

으아아아

sinon.stub(fooWrapper, 'foo'). 단지 테스트를 위해 이렇게 래핑해야 한다는 것은 약간 아쉽지만, 적어도 Typescript에서는 명시적이고 유형이 안전합니다(입력이 anysinon.stub(fooWrapper, 'foo')。只为了测试而必须这样包装有点遗憾,但至少它在 Typescript 中是显式的且类型安全的(与输入为 anyexports와는 대조적).

P粉797855790

방금 테스트해봤습니다. 그것은 매력처럼 작동합니다.

으아아아

실행할 때 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

이 말이 이해되길 바랍니다!

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿