我为 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 中尝试过。我希望这有帮助。