Question

Je suis en train de tester des vues Backbone.js à l'aide de Jasmine (via jasmin sans tête-webkit). Tout fonctionne bien, sauf que mes modèles HAML-js ne sont pas accessibles en cours de test.

Le code suivant à mon avis fonctionne très bien:

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

... mais quand il est exécuté dans le cadre d'un Jasmine spec je reçois l'échec suivant:

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

Je pense que je fais quelque chose de mal dans jasmine.yml. J'ai inclus explicitement le fichier modèle il échoue encore:

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

Peut-être que je suis juste fait fausse route ici ... dois-je utiliser Jasmine à bout et railler les appels à JST et jQuery? Une approche strictement unité test dit que je devrais, dans ce cas, l'absence d'accès modèle est un non-problème.

Les conseils -. Soit sur mon approche de tester, ou l'échec JST spécifique, serait grandement apprécié

Était-ce utile?

La solution

besoin Non à bout, il vous suffit de configurer correctement vos chemins d'actifs. Afin de tirer profit de l'intégration Pignons en 0.8.0 et au-dessus, la meilleure façon de configurer votre fichier jasmine.yml serait comme ceci:

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

Cela crée Pignons regarder dans app/assets/javascripts et lib/assets/javascripts, et racontera le jasmin sans tête-webkit pour tirer tous les fichiers possible dans les deux répertoires. fichier normal de Jasmine exigeant ne serait pas utilisé dans ce cas, à Pignons.

Ensuite, configurez vos déclarations de require comme vous le feriez normalement dans vos fichiers JS. Ainsi, dans 'application.js.coffee':

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

alert "Look, Internet codes!"

Et dans avia_view.js.coffee:

#= require views/avia_view_template.jst.hamljs

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

Bien sûr, ces modèles de .hamljs ne sera pas chargé, sauf si un processeur Haml Pignons compatible a été chargé. Donc, vous voulez avoir un Gemfile qui avait au moins ce qu'elle contient:

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

Alors, si votre application elle-même sait quoi faire quand ces pierres précieuses vendored JS sont chargés, vous pouvez vous débarrasser de copies propres de jQuery et Backbone, et vous auriez également des modèles de .hamljs disponibles. À ce moment-là, vous devez exécuter en utilisant Bundler:

bundle exec jasmine-headless-webkit

La dernière chose, la meilleure façon de vous assurer que tout devient effectivement chargée est d'utiliser l'option de liste:

bundle exec jasmine-headless-webkit -l

Cela prendra tout par les chargeurs de fichiers de JHW et Pignons et imprimer l'ordre des fichiers à inclure. Cela vous aidera à diagnostiquer les problèmes de require, puisque vous avez toujours traiter à la fois Jasmine style et le chargement Pignons de style en un seul scénario. Configuration de vos fichiers src à charger entièrement par l'intermédiaire de Pignons le processus beaucoup, donc je recommande une configuration beaucoup comme celui-ci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top