【问题标题】:Share code between view specs在视图规范之间共享代码
【发布时间】:2011-11-13 12:21:43
【问题描述】:

对于给定的 Rails (3) 控制器,我有几个视图规范:编辑、索引、新建、显示,我希望在它们之间共享一些样板设置代码。我想避免将它放在 spec_helper.rb 文件中。有什么想法吗?

更具体地说,在规范/视图/步骤中,我有四个文件:{edit,new,show,index}.html.erb_spec.rb。我希望他们分享一些代码,例如

  let(:workflow) do
    document = Factory.create(:document)
    document.user = user
    document.save!
    document.workflow
  end

例如 - 确切的代码无关紧要。我想这样做而不把它放在 spec_helper.rb 中。

【问题讨论】:

    标签: rspec rspec-rails


    【解决方案1】:

    你会发现 rspec 正好有这个功能:shared context

    它会让你做这样的事情

    shared_context 'workflow' do
      let(:workflow) do
        document = Factory.create(:document)
        document.user = user
        document.save!
        document.workflow
      end
    end
    

    如果您需要在不同的规范文件之间共享此内容,请将其写入您存储在 spec/support 中的文件中。在您的测试中,您可以编写:

    describe 'Something' do
      include_context 'workflow'
    
      it 'behaves correctly' do
        ...
      end
    end
    

    希望这会有所帮助。

    【讨论】:

    • 请注意 spec/support 文件夹只是一个约定,Rspec 不会自动要求其中的文件,因此您需要 require 'spec/support/filey'
    • 是的。我通常在我的rails_helper.rb(以前是 spec_helper)中包含以下行:Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2016-11-05
      • 2014-07-07
      相关资源
      最近更新 更多