2

我想shared_examples在不同的规范文件中重用这个块。我想将它提取到一个单独的文件中,并传入对象,所以它并不总是用户。我尝试的两件事都失败了,有可能吗?

describe User  do
  before  { @user = build_stubbed(:user) }
  subject { @user }

  shared_examples 'a required value' do |key| # trivial example, I know
    it "can't be nil" do
      @user.send("#{key}=", nil)
      @user.should_not be_valid
    end
  end

  describe 'name'
    it_behaves_like 'a required value', :name
  end
end
4

1 回答 1

4

只是require另一个文件。shared_examples在顶层工作,所以一旦定义它们总是可用的;所以要小心命名冲突。

很多 RSpec 用户会将共享示例放在spec/support/shared_examples/FILENAME.rb. 然后在spec/spec_helper.rb有:

Dir["./spec/support/**/*.rb"].sort.each {|f| require f}

或者在 Rails 项目中

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

这在共享示例文档的“约定”部分中列出。

于 2013-05-10T17:35:44.860 回答