Come si fa a cancellare gli oggetti (nel database e nella memoria) si è creatoRSpec: tavolo a filo/distruggere gli oggetti dopo ogni contesto
- dopo ogni prova
- e dopo ogni contesto? (in un contesto potrebbe avere senso costruire test l'uno sull'altro)
Esiste un metodo per farlo automaticamente?
Ho il seguente problema:
Ogni test salva le voci nel database. Il prossimo test dipende quindi da queste voci. Anche se volessi costruire test che dipendono da altri test, non potrei, perché l'ordine in cui i test vengono eseguiti non è controllabile.
factories.rb:
sequence(:name) { |n| "purchaser #{n}" }
organization_spec.rb:
context "when no supplier exists" do
it "finds no associated suppliers" do
purchaser = create(:organization_purchaser)
purchaser.partners.empty?.should == true
end
end
context "when one supplier exists" do
it "finds one associated suppliers" do
purchaser = create(:organization_purchaser)
supplier = create(:organization_supplier)
partnership = create(:partnership, organization: purchaser, partner: supplier)
purchaser.partners.last.name.should == "purchaser 1"
end
end
context "when two suppliers exist" do
it "finds two associated suppliers" do
purchaser = create(:organization_purchaser)
2.times do |i|
supplier = create(:organization_supplier)
partnership = create(:partnership, organization: purchaser, partner: supplier)
end
purchaser.partners.last.name.should == "purchaser 2"
end
end
RSpec uscita:
Organization
#suppliers_for_purchaser
responds
when no supplier exists
finds no associated suppliers
when two suppliers exist
finds two associated suppliers
when one supplier exists
finds one associated suppliers (FAILED - 1)
Failures:
1) Organization#suppliers_for_purchaser when one supplier exists finds one associated suppliers
Failure/Error: purchaser.partners.last.name.should == "purchaser 1"
expected: "purchaser 1"
got: "purchaser 3" (using ==)
https://github.com/bmabey/database_cleaner – deefour