【问题标题】:How to generate fixtures for use in Jasmine tests如何生成用于 Jasmine 测试的夹具
【发布时间】:2011-09-15 15:37:46
【问题描述】:

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

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

我想生成 Jasmine 固定装置,而不是使用静态(脆弱)固定装置。所以当标签代码改变时,Jasmine 测试的fixture 会自动更新。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我为 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
    

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

    【讨论】:

    • 有趣。这当然是它可以工作的一种方式(目前,该插件必须在 Rails 2 中工作,所以这不是问题)。但是,我仍然希望在标签规范上触发 success 的夹具生成,因为如果标签规范失败,生成的夹具无论如何都是“坏的”。
    【解决方案2】:

    万一有人偶然发现这个问题,这里有一个更新、更好的答案。

    https://github.com/crismali/magic_lamp

    Magic Lamp 将允许您将视图/部分渲染为固定装置,以在您的 Javascript 测试中使用。无论如何,这正是我一直在寻找的。​​p>

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2017-12-21
      相关资源
      最近更新 更多