Как создать приборы для использования в тестах Жасмин - PullRequest
2 голосов
/ 15 сентября 2011

Я пишу плагин / гем для Rails, в основном это несколько помощников (FormHelpers, FormTagHelpers) и некоторый связанный Javascript для добавления поведения.

Я тестирую помощники тегов с помощью RSpec. И теперь я настраиваю Jasmine для проверки поведения Javascript.

Я бы хотел сгенерировать осветителей Jasmine из кода помощника тега в моем плагине вместо использования статических (хрупких) осветителей. Поэтому, когда код тега изменится, приборы для тестов Jasmine автоматически обновятся.

Моей первой мыслью было расширение RSpec, с чем-то вроде общего поведения "it_should_behave_like", только это будет "it_should_save_fixture_on_success". И это будет что-то вроде блока after (: all).

Две вещи, которые мне нужно знать ... как получить «заголовок» контекста (который будет именем по умолчанию для прибора) и как определить, в after (: all), если все спецификации прошли успешно.

Это звучит разумно? Или я что-то упустил очевидное?

Ответы [ 2 ]

2 голосов
/ 17 января 2015

На случай, если кто-то наткнется на это, вот более новый, лучший ответ.

https://github.com/crismali/magic_lamp

Волшебная лампа позволит вам визуализировать представления / частичные функции в качестве приборов для использованияв ваших тестах Javascript.Во всяком случае, это то, что я искал.

2 голосов
/ 15 сентября 2011

Я сделал нечто подобное для Жасмин. Я написал задачу Rake, которая компилирует некоторые шаблоны HAML в HTML и помещает их в путь приспособлений Jasmine. Затем я настроил задачу Rake как зависимую, чтобы она выполнялась перед задачей jasmine:ci. Вот задача Rake, которую я написал:

namespace :dom do                                                                                                                                           
  namespace :fixtures do
    target_path   = "spec/javascripts/fixtures"
    template_path = "spec/javascripts/templates"

    task :compile do
      view_paths  = ActionController::Base.view_paths
      view_paths  << template_path

      view = ActionView::Base.new(view_paths, {}) 

      Dir.glob File.join(template_path, '*') do |path|
        template  = File.basename(path)
        template  = template.slice(0...template.index('.')) if template.index('.')
        target    = File.join(target_path, template) + ".html"

        puts "Rendering fixture '#{template}' to #{target}"

        File.open(target, 'w') do |f| 
          f.write view.render(:file => template, :layout => false)
        end 
      end 
    end 

    task :clean do
      Dir.glob File.join(target_path, '*') do |path|
        File.delete path
      end 
    end 
  end 
end

namespace :spec do
  desc "Run specs in spec/javascripts"
  task :javascripts => ['dom:fixtures:compile', 'jasmine:ci']
end

Это позволяет вам писать шаблоны HAML или ERB в spec/javascript/templates, и они компилируются в spec/javascript/fixtures, который затем может быть загружен Jasmine. Строка view_paths = ActionController::Base.view_paths делает партиалы вашего приложения доступными для шаблонов в spec/javascript/templates. Вам, вероятно, придется настроить этот пример, чтобы сделать своих помощников доступными. Наконец, я должен упомянуть, что это из приложения Rails 2.3. Я еще не пробовал это в Rails 3.x Надеюсь, это поможет.

...