Recentemente ho sono imbattuto in questo problema durante la migrazione di alcune request
test verso feature
formato di prova per Capybara 2.1, e il passaggio alla sintassi di test non ci da should
-based a expect
based. Per utilizzare la domanda originale come l'esempio, ho avuto il codice come:
subject { -> { post("/api/users", parameters) } }
it { should change(User,:count).by(1) }
it { should_not change(ActionMailer::Base, :deliveries) }
Portare questo oltre a expect
sintassi in un test scenario
presentato alcuni problemi e ha prodotto questo tipo di (lavorare) clunkiness (mi dispiace, non è un grande fan di esplicitamente nidificato lambda
s/expect
e) chiave:
expect(-> { expect(post("/api/users", parameters)).to change(User,:count).by(1) }
).to_not change(ActionMailer::Base, :deliveries)
ci sono alcuni grandi soluzioni a questo problema in this StackOverflow thread che ho provato ed è riuscito con, ma quello che ho finito per fare era semplicemente seguire il formato originale un po 'e dividere fuori ogni dichiarazione nel proprio scenario
; qualcosa di simile:
feature "Add users via API" do
given(:posting_parameters_to_api) { -> { post("/api/users", parameters) } }
scenario "foo" do
expect(posting_parameters_to_api).to change(User,:count).by(1)
end
scenario "bar" do
expect(posting_parameters_to_api).to_not change(ActionMailer::Base,
:deliveries)
end
end
più dettagliato rispetto al request
specifiche originali, ma essenzialmente a lavorare nello stesso modo. L'implementazione sarà probabilmente dovuta al gusto personale.
fonte
2013-05-13 12:03:10
stavo cercando questo me stesso – prusswan