IT Share you

Proxyquire, rewire, SandboxedModule 및 Sinon : 장단점

shareyou 2020. 11. 30. 20:18
반응형

Proxyquire, rewire, SandboxedModule 및 Sinon : 장단점


Node 종속성을 모의 할 때 다음 라이브러리에서 발생했습니다.

그들은 모두 거의 똑같은 일을하는 것 같습니다 : 당신이 모의 require()호출 을 할 수 있도록 합니다 (거의 모든 것을 조롱하는 Sinon을 제외하고). 그들은 모두 꽤 정교한 설정이 필요한 것 같습니다. 전달 된 문자열의 정확한 구문에 주목합니다 require. 리팩토링 중에는 좋지 않습니다.

각 도서관의 장단점은 무엇입니까? 언제 하나를 선택해야합니까? 각 라이브러리가 탁월한 사용 사례는 무엇입니까? 이 공간에서 더 나은 다른 제품은 무엇입니까?


그것은 완전히 속임수처럼 느껴지지만 다른 사람이 질문에 대답하지 않기 때문에 다음과 같습니다.

  • Proxyquire는 require종속성 체인의 모든 위치에 가짜를 삽입 할 수 있습니다. 대한 require의 당신은 이상하지 않습니다 및 방법에 대한 당신에 대해 정의하지 않습니다 require당신이 인수 할 원래로 다시 떨어질 것들. 을 사용하여 비활성화 할 수 있습니다 noCallThru. 따라서 여전히 원본을로드하고 사용자가 정의한 것으로 대체합니다. Rewire 및 SandboxedModule과 달리 require오버로드에 대한 전역 변수를 정의 할 수 없습니다 .

  • 재배 선 인계 require를 분사하고 __get____set__각 모듈에 등록. 개인용 변수 이름을 알고 있으면 바꿀 수 있습니다. 의존성 주입을 생각하십시오.

  • SandboxedModule은 새 V8 vm에서 전체 프로세스를 실행한다는 점을 제외하면 Proxyquire와 거의 동일합니다. (이 접근 방식에는 테스트 당 성능 비용이 있습니다.) 또한 v 1.0에는 고약한 버그가있어 대체하지 않은 것이 지원하지 않는 네이티브 모듈을 참조 할 때 실패합니다. https://github.com/robrich/sandboxed-module-graceful-fs를 참조 하십시오 .

  • Sinon은 require다른 3과 같이 인수하지 않습니다. 오히려 더 전통적인 조롱 프레임 워크입니다. 지정된 메서드를 가짜로 바꾸거나 호출 된 시점을 추적하는 모의 객체를 만듭니다.

참고 URL : https://stackoverflow.com/questions/24190043/proxyquire-rewire-sandboxedmodule-and-sinon-pros-cons

반응형