如何生成用于Jasmine测试的灯具

时间:2011-09-15 15:37:46

标签: javascript ruby-on-rails rspec fixtures jasmine

我正在编写一个Rails插件/ gem,它基本上是一些帮助器(FormHelpers,FormTagHelpers),以及一些相关的Javascript来添加行为。

我正在使用RSpec测试标签助手。现在我正在设置Jasmine来测试Javascript行为。

我想从我的插件中的标记帮助程序代码中生成 Jasmine fixtures,而不是使用静态(脆弱)fixture。因此,当标签代码更改时,Jasmine测试的灯具将自动更新。

我的第一个想法是扩展RSpec,类似于“it_should_behave_like”的共享行为,只有它是“it_should_save_fixture_on_success”。它会像after(:all)块一样。

我需要知道的两件事......如何获得上下文的“标题”(这将是灯具的默认名称“,以及如何确定,在后面(:全部),如果所有规格都成功运行。

听起来合理吗?或者我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:2)

我为Jasmine做了类似的事情。我编写了一个Rake任务,它将一些HAML模板编译成HTML并将它们放在Jasmine的fixture中。然后,我将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

这使您可以在spec/javascript/templates中编写HAML或ERB模板,然后将它们编译为spec/javascript/fixtures,然后由Jasmine加载。view_paths = ActionController::Base.view_pathsspec/javascript/templates行使您的应用程序的部分可用于{{1}}中的模板。您可能需要调整此示例以使您的帮助程序也可用。最后,我应该提到这是来自Rails 2.3应用程序。我还没有在Rails 3.x中尝试过它。我希望这会有所帮助。

答案 1 :(得分:2)

如果有人偶然发现这一点,这是一个更新,更好的答案。

https://github.com/crismali/magic_lamp

Magic Lamp将允许您将视图/局部视图渲染为在Javascript测试中使用的装置。无论如何,这正是我所寻找的。