2011-12-02 3 views
0

Jasmine을 사용하여 jasmine-headless-webkit을 통해 일부 backbone.js 뷰를 테스트하려고합니다. haml-js 템플릿을 테스트 할 수 없다는 점을 제외하면 모든 것이 잘 작동합니다.Jasmine 테스트를 실행하는 동안 haml-js 템플릿을 찾을 수 없습니다.

내보기에서 다음 코드는 잘 작동 :

ReferenceError: Can't find variable: JST in /home/duncan/avia/app/assets/javascripts/views/avia_view.js.coffee 

:

render: => 
    html = JST['views/avia_view_template']() 
    $(@el).html(html) 

...하지만 그것은 나는 다음과 같은 오류를 얻을 재스민 사양의 일부로 실행할 때 나는 jasmine.yml에서 뭔가 잘못하고 있다고 생각합니다.

아마도

src_files: 
    - "vendor/**/*.{js,coffee}" 
    - "lib/**/*.{js,coffee}" 
    - app/assets/javascripts/application.js 
    - app/assets/javascripts/avia.js 
    - app/assets/javascripts/jquery-1.6.4.js 
    - app/assets/javascripts/underscore.js 
    - app/assets/javascripts/backbone.js 
    - app/assets/javascripts/jquery.jqGrid.min.js 
    - app/assets/javascripts/views/avia_view_template.jst.hamljs 
    - app/assets/javascripts/views/avia_view.js.coffee 

난 그냥 여기에 잘못된 접근 방식을 데려 갈거야 ... 내가 JST에 대한 호출 밖으로 & 모의를 스텁 재스민를 사용한다 : 나는 명시 적으로 계속 실패 템플릿 파일을 포함 시켰습니다 및 jQuery? 엄격한 단위 테스트 접근법은 필자에게해야한다고 말하며,이 경우 템플릿 액세스의 부재는 문제가되지 않는다.

테스트에 대한 내 접근법 또는 특정 JST 실패에 대한 모든 팁을 크게 높이 평가할 수 있습니다.

답변

2

스텁 할 필요없이 자산 경로를 올바르게 설정하면됩니다. 위의 0.8.0에 톱니 통합의 장점을 가지고하기 위해, 당신의 jasmine.yml 파일을 설정하는 가장 좋은 방법은 다음과 같이 될 것이다 : 이것은 app/assets/javascriptslib/assets/javascripts에보고 톱니를 설정합니다

src_dir: app/assets/javascripts 
asset_paths: 
- lib/assets/javascripts 
src_files: 
- "**/*" 

jasmine-headless-webkit이 두 디렉토리에서 가능한 모든 파일을 가져 오도록 지시합니다. Jasmine의 정상적인 파일 요구는이 경우에는 사용되지 않습니다. 단지 Sprockets입니다.

그런 다음 일반적으로 JS 파일에있는 것처럼 require 문을 설정하십시오.

#= require jquery-1.6.4 
#= require avia 
#= require underscore 
#= require backbone 
#= require jquery.jqGrid.min 
#= require_tree . 

alert "Look, Internet codes!" 

그리고 avia_view.js.coffee에 : 그래서 'application.js.coffee'에 톱니 가능 HAML 프로세서가로드되지 않는 한 물론

#= require views/avia_view_template.jst.hamljs 

class window.AviaView extends Backbone.View 
    template: JST['views/avia_view_template'] 
    ... code ... 

는, 그 .hamljs 템플릿은로드되지 않습니다.

gem 'jasmine-headless-webkit' 
gem 'haml-sprockets' 
# also bring in backbone and jquery 
gem 'jquery-rails' 
gem 'backbone-rails' 

그런 다음 응용 프로그램 자체가 당신의 사본을 자신의 그 vendored JS 보석이로드 될 때, 당신은 제거 할 수 무엇을 알고 있다면 : 그래서 당신은 적어도이 그 안에 있던 Gemfile을 할 것입니다 jQuery와 Backbone이 있고 .hamljs 템플릿도 있습니다. 목록 옵션을 사용하는 모든 실제로로드 얻고 있는지 확인

bundle exec jasmine-headless-webkit 

마지막 것은, 가장 좋은 방법입니다 : 그 시점에서, 당신은 Bundler 프로그램을 사용하여 실행해야합니다 JHW의를 통해 모든 것을 실행

bundle exec jasmine-headless-webkit -l 

스프로킷 (Sprockets)의 파일 로더를 사용하고 포함 할 파일의 순서를 인쇄합니다.이렇게하면 require 문제를 진단하는 데 도움이됩니다. 이는 하나의 시나리오에서 항상 Jasmine 스타일과 Sprockets 스타일 로딩을 처리해야하기 때문입니다. Sprockets을 통해 완전히로드되도록 src 파일을 설정하면 프로세스가 단순 해 지므로이 설정과 비슷한 설정을 권장합니다.

+0

대단히 고마워요. 이 지침을 따르는 사람이라면 한 가지주의 할 점이 있습니다. 저작물 작성 시점에서 3 일 전에 'asset_paths'설정이 추가되었으므로 가장 재스민이없는 헤드리스 웹킷 코드를 사용하고 있는지 확인하십시오. 나는 아니었고, 나는 그것을 알아낼 때까지 잠시 책상 위에 머리를 두드렸다. –