Скажем, у меня есть класс в Coffeescript:
class MyGame
constructor: () ->
@me = new Player
@opponents = [new Player, new Player]
, который хотел бы протестировать в Jasmine:
describe "MyGame", ->
beforeEach ->
window.game = new MyGame
it "should have two players", ->
expect(window.game.opponents.length).toEqual 2
Но я получаю error TypeError: Результат выражения 'window.game.opponents' [undefined] не является объектом.
?
Подход window.game
мне тоже кажется неудобным. Если я попытаюсь определить его как @game = new MyGame
, я получу ошибку ReferenceError: не могу найти переменную: MyGame
, но я думаю, что это как-то связано с тем, как Coffeescript работает в завершение?
ОБНОВЛЕНИЕ: Проблема больше похожа на проблему со ссылками, как описано выше. Я использую guard-jasmine
, который выглядит как
guard 'jasmine', :all_on_start => false, :all_after_pass => false do
watch(%r{app/assets/javascripts/(.+)\.(js\.coffee|js)}) { |m| "spec/javascripts/#{m[1]}_spec.#{m[2]}" }
watch(%r{spec/javascripts/(.+)_spec\.(js\.coffee|js)}) { |m| "spec/javascripts/#{m[1]}_spec.#{m[2]}" }
watch(%r{spec/javascripts/spec\.(js\.coffee|js)}) { "spec/javascripts" }
end
, и мой файл jasmine.yml
имеет:
src_files:
- "app/assets/**/*.js"
- "app/assets/**/*.coffee"
spec_files:
- '**/*[sS]pec.js.coffee'
asset_pipeline_paths:
- app/assets
- spec/javascripts
Я получаю ReferenceError: не могу найти variable: MyGame
, поэтому я полагаю, что это либо что-то из конвейера ресурсов Rails 3.1, либо способ обертывания объектов в Coffeescript.