Эта страница ещё не переведена
Ниже показан английский оригинал.
assert_outcome
assert_outcome(..) checks the latest handler call by its classified Outcome, failures included.
Outcome folds a call into five cases: Ack, Nack, Drop, DecodeFailed and Panicked.
Nack covers both retry() and retry_after(..), so the delay plays no part.
A panic or a decode failure wins over the settlement: such a call reads as Panicked or DecodeFailed, which panicked and assert_last_failed_to_decode check on their own.
Here the delayed copy waits for tb.advance(..) on the paused clock, so the record holds one call.
settled checks by HandlerOutcome instead, and outcomes returns the outcome of every call.
Example
- Macros
- Manual
#[tokio::test(start_paused = true)]
async fn a_delayed_retry_reads_as_a_nack() -> Result<(), Box<dyn Error>> {
let tb = TestApp::start(app()).await?;
let broker = tb.broker::<MemoryBroker>();
broker
.message(&Order { id: 7 })
.to("orders")
.publish()
.await?;
broker
.subscriber("orders")
.assert_called_once()
.assert_outcome(Outcome::Nack);
Ok(())
}
#[tokio::test(start_paused = true)]
async fn a_delayed_retry_reads_as_a_nack() -> Result<(), Box<dyn Error>> {
let tb = TestApp::start(app()).await?;
let broker = tb.broker::<MemoryBroker>();
broker
.message(&Order { id: 7 })
.to("orders")
.publish()
.await?;
broker
.subscriber("orders")
.assert_called_once()
.assert_outcome(Outcome::Nack);
Ok(())
}