Comment passer une variable d'instance pour une RSpec partagée exemple

Je suis en utilisant RSpec (2.10.1) pour tester des validations sur un modèle et en avons extrait un peu de code pour partager avec d'autres modèle de validation. Les validations ont d'abord été écrit sur la table Sociétés, de sorte que le code ressemble à ceci:

# 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

et l'usage est:

# 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

Je voudrais passer le @company en tant que paramètre de l'exemple afin que je puisse réutiliser le code pour les différents modèles, quelque chose comme ceci:

# 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

et l'usage est:

# 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

Cependant, quand je fais cela je reçois undefined method 'address2' for nil:NilClass. Il semble @company n'est pas passé (pas dans le champ d'application?) Comment puis-je obtenir quelque chose comme cela fonctionne?

InformationsquelleAutor George Shaw | 2012-07-06