異なるファイル間で Rspecshared_examples を使用するにはどうすればよいですか?
概要
この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
解決策
他のファイルを必要とするだけです。 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}
これは、共有サンプル ドキュメントの「規約」セクションに記載されています。