我正在编写一个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)块一样。
我需要知道的两件事......如何获得上下文的“标题”(这将是灯具的默认名称“,以及如何确定,在后面(:全部),如果所有规格都成功运行。
听起来合理吗?或者我错过了一些明显的东西?
答案 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_paths
第spec/javascript/templates
行使您的应用程序的部分可用于{{1}}中的模板。您可能需要调整此示例以使您的帮助程序也可用。最后,我应该提到这是来自Rails 2.3应用程序。我还没有在Rails 3.x中尝试过它。我希望这会有所帮助。
答案 1 :(得分:2)
如果有人偶然发现这一点,这是一个更新,更好的答案。
https://github.com/crismali/magic_lamp
Magic Lamp将允许您将视图/局部视图渲染为在Javascript测试中使用的装置。无论如何,这正是我所寻找的。 p>