In testing my pallet, I have some function that stores something and deposits an event.
#[pallet::event]
#[pallet::generate_deposit(pub(super) fn deposit_event)]
pub enum Event<T: Config> {
ThingStored(thing<T>, T::AccountId),
}
#[pallet::weight(10_000 + T::DbWeight::get().writes(1))]
pub fn create_thing(origin: OriginFor<T>) -> DispatchResult {
let creator = ensure_signed(origin)?;
let id = 1;
let thing = Thing {
id,
creator: creator.clone()
};
// Update storage.
<Things<T>>::insert(id, thing.clone());
// Emit an event.
Self::deposit_event(Event::ThingStored(thing, creator.clone()));
Ok(())
}
In my pallet tests, I am calling the function and would like to assert that the event deposited contains the correct data.
#[test]
fn it_works_for_default_value() {
new_test_ext().execute_with(|| {
// Dispatch a signed extrinsic.
assert_ok!(ThingsModule::create_thing(Origin::signed(1)));
let event = <frame_system::Pallet<Test>>::events().pop()
.expect("Expected at least one EventRecord to be found").event;
// How can I access the `Thing` object from the event? I'll also then use it to read from storage
// assert_eq!(ThingsModule::things(thing.creator).unwrap().creator, 1);
});
}