티스토리 뷰


발생일: 2013.04.29

문제:
Grunt 로 테스트를 빌드 과정에 포함시키려 한다.

헌데, grunt-contrib-qunit 나 grunt-contrib-jasmine 을 써서 빌드에 포함하려고 하는데,
phantomjs 가 설치되어 있지 않다며 실행되지 않는다.

이미 phantomjs 를 설치해뒀는데, 아무래도 제대로 인식되지 않는 모양이다.

어떻게 해결해야 할까?


해결책:

grunt-contrib-qunit 과 grunt-contrib-jasmine 모듈은,
headless 브라우저인 phantomjs 위에서 동작한다.

두 모듈 모두 phantomjs 노드 모듈에 의존하고 있는데,
이 모듈은 다른 노드 모듈에서 phantomjs를 사용할 수 있도록 API를 제공하는 어댑터이다.

두 모듈이 제대로 실행되지 않았던 건,
phantomjs 노드 모듈에 문제가 있었기 때문이다.

npm으로 phantomjs 노드 모듈을 설치하면,
운영 체제에 맞는 phatnomjs 바이너리를 다운로드 받는다.
다운로드 받은 바이너리는 임시 폴더에서 압축을 풀고,
압축이 풀리면 필요한 폴더로 옮기도록 구현하고 있다.

헌데, 어떤 문제로 압축이 제대로 풀리지 않았기 때문이다.
같은 문제로 여러 이슈가 등록됐고,
가장 구체적인 것은 https://github.com/Obvious/phantomjs/issues/34 이다.

맥에서만 발생하고 있고, 아직까지 완벽히 해결된 것으로 보이진 않는다.


일단 임시 방편으로 문제를 해결하기 위한 절차는 다음과 같다.

1. grunt-contrib-qunit 이나, grunt-contrib-jasmine 을 다시 설치한다. (npm install)
2. 압축 파일을 다운로드 받는다는 로그가 보이고,
    압축이 풀렸다는 로그가 별도로 출력되지 않았다면 오류가 발생된 것으로 보면 된다.
3. 그럼 각 모듈 디렉토리에서, node_modules/phantom/tmp 디렉토리로 이동한다.
4. 다운로드 받은 바이너리 파일이 있을 것이다. 압축을 다시 해제한다.
    (이미 압축이 풀려있더라도, 올바르게 풀리지 않았을 가능성이 높다. 웬만하면 다시 푼다)
5. 압축 해제한 디렉토리의 bin/ 경로에 phantomjs 바이너리가 있다.
    이 파일을 node_modules/phantom/lib/phantom/bin/phantomjs 디렉토리로 옮긴다.
    (phantomjs 는 node_modules/.lib 에 phantomjs 심볼릭 링크를 생성하는데,
    이 파일은 lib/phantom/bin/phantomjs 파일을 가리키고 있다)



* 참고로, grunt-jasmine-runner  는 grunt 0.3.x 버전용이다.
  0.4.x  에서는 grunt-contrib-jasmine 모듈을 사용해야 한다.



반응형
댓글
공지사항