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
'IT Share you' 카테고리의 다른 글
Mercurial에서 마지막 커밋을 어떻게 "롤백"합니까? (0) | 2020.11.30 |
---|---|
ImportError : PIP를 사용하여 이름 HTTPSHandler를 가져올 수 없습니다. (0) | 2020.11.30 |
Swift에서 두 사전을 어떻게 비교합니까? (0) | 2020.11.30 |
프로그래밍 방식으로 C ++ 배열의 크기를 결정합니까? (0) | 2020.11.30 |
Rails 애플리케이션의 Javascript Include Tag 모범 사례 (0) | 2020.11.30 |