나는 브라우저를 대상으로하는 앱을 작성하고 있으며, 내 라이브러리 코드에 대한 자동화 된 테스트를 작성하려고한다. Node과 같은 명령 줄 환경에서 브라우저 외부에서 테스트를 실행하고 싶습니다. Mocha 또는 Jasmine과 같은 BDD 프레임 워크를 사용하고 있지만 아직 테스트 프레임 워크를 선택하지 않았습니다.로드하기 전에 노드 모듈에 전역을 삽입 할 수 있습니까?
내 코드는 Knockout의 관찰 가능한 속성에 따라 다릅니다. 안타깝게도 Knockout 라이브러리에는 관찰 가능한 속성뿐만 아니라 DOM에 바인딩하는 코드도 포함되어 있습니다. 따라서 노드에서 넉 아웃 라이브러리 require()
을 시도해 보면 라이브러리가 노드에서 정의되지 않은 변수 window
, navigator
및 document
을 참조하려고하기 때문에 오류가 발생합니다. Knockout은 실제로 이러한 변수 중 하나를 사용하지 않습니다. 많은 - DOM 바인딩에 대한 기능 감지는 대부분 내게 중요하지 않지만 기능을 사용하기 때문에 노드가로드되지 않습니다. 파일.
그래서 여기 내 질문 : 로드 할 때 모듈에 더미 변수를 삽입 할 수 있습니까? "소스 파일을로드 한 후 실행하기 전에 코드가 성공적으로 실행될 수 있도록 모듈 내부에 몇 개의 변수를 설정해 주겠습니까?"라고 말할 수 있습니까?
이미 CoffeeScript이 노드의 모듈 로더를 패치하므로 .coffee
파일을로드 할 수 있습니다. .js
; 그래서 내가 어떻게 만 알았더라도, 변수를 주입하기 위해 그것을 패치 할 수있는 방법이있는 것처럼 보입니다.
D' 오! 맞습니다. JavaScript에서는 Knockout에서'require()'를 호출하기 전에'window = {};'와 같은 것을 할 수 있습니다. 하지만 CoffeeScript를 사용하고 있습니다. 기본적으로 익명의 함수로 모든 것을 래핑하므로 전역 변수가 모든 것을 흘리지 않으므로 대신 global.window를 설정해야합니다. 찾는 대상이 있다는 것을 알게되면, 올바른 방향으로 나를 가리켜 주셔서 감사합니다. (그리고 jsdom을 지적 해 주셔서 고마워요. 저도 역시 도움이 될 것입니다!) –