RSpec(2.10.1)を使用してモデルの検証をテストし、他のモデルの検証と共有するためにいくつかのコードを抽出しました。検証は最初にCompaniesテーブルに書き込まれたため、コードは次のようになります。
# support/shared_examples.rb
shared_examples "a text field" do |field, fill, length|
it "it should be long enough" do
@company.send("#{field}=", fill * length)
@company.should be_valid
end
etc...
end
使用法は次のとおりです。
# company_spec.rb
describe Company do
before { @company = Company.new( init stuff here ) }
describe "when address2" do
it_behaves_like "a text field", "address2", "a", Company.address2.limit
end
etc...
end
共有例にパラメーターとしてを渡して@company
、次のようなさまざまなモデルでコードを再利用できるようにします。
# support/shared_examples.rb
shared_examples "a text field" do |model, field, fill, length|
it "it should be long enough" do
model.send("#{field}=", fill * length)
model.should be_valid
end
etc...
end
使用法は次のとおりです。
# company_spec.rb
describe Company do
before { @company = Company.new( init stuff here ) }
describe "when address2" do
it_behaves_like "a text field", @company, "address2", "a", Company.address2.limit
end
etc...
end
ただし、これを行うと、が得られundefined method 'address2' for nil:NilClass
ます。@company
渡されていないようです(範囲内ではありませんか?)このようなものを機能させるにはどうすればよいですか?