2

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

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

我想从我的插件中的标签助手代码中生成Jasmine 固定装置,而不是使用静态(脆弱)固定装置。因此,当标记代码更改时,Jasmine 测试的固定装置将自动更新。

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

我需要知道两件事......如何获得上下文的“标题”(这将是夹具的默认名称),以及如何在 after(:all) 中确定是否所有规格成功运行。

这听起来合理吗?还是我错过了一些明显的东西?

4

2 回答 2

2

我为 Jasmine 做了类似的事情。我编写了一个 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 中尝试过。我希望这有帮助。

于 2011-09-15T15:53:31.893 回答
2

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

https://github.com/crismali/magic_lamp

Magic Lamp 将允许您将视图/部分渲染为在您的 Javascript 测试中使用的固定装置。无论如何,这几乎就是我一直在寻找的东西。

于 2015-01-16T23:05:29.020 回答