pub struct Settings { /* private fields */ }
Expand description
Configures how insta operates at test time.
Settings are always bound to a thread and some default settings are always available. These settings can be changed and influence how insta behaves on that thread. They can either temporarily or permanently changed.
This can be used to influence how the snapshot macros operate. For instance it can be useful to force ordering of maps when unordered structures are used through settings.
Some of the settings can be changed but shouldn’t as it will make it harder for tools like cargo-insta or an editor integration to locate the snapshot files.
Settings can also be configured with the with_settings!
macro.
Example:
use insta;
let mut settings = insta::Settings::clone_current();
settings.set_sort_maps(true);
settings.bind(|| {
// runs the assertion with the changed settings enabled
insta::assert_snapshot!(...);
});
Implementations§
Source§impl Settings
impl Settings
Sourcepub fn new() -> Settings
pub fn new() -> Settings
Returns the default settings.
It’s recommended to use clone_current
instead so that
already applied modifications are not discarded.
Sourcepub fn clone_current() -> Settings
pub fn clone_current() -> Settings
Returns a copy of the current settings.
Sourcepub fn set_sort_maps(&mut self, value: bool)
pub fn set_sort_maps(&mut self, value: bool)
Enables forceful sorting of maps before serialization.
Note that this only applies to snapshots that undergo serialization
(eg: does not work for assert_debug_snapshot!
.)
The default value is false
.
Sourcepub fn set_prepend_module_to_snapshot(&mut self, value: bool)
pub fn set_prepend_module_to_snapshot(&mut self, value: bool)
Disables prepending of modules to the snapshot filename.
By default the filename of a snapshot is <module>__<name>.snap
.
Setting this flag to false
changes the snapshot filename to just
<name>.snap
.
The default value is true
.
Sourcepub fn prepend_module_to_snapshot(&self) -> bool
pub fn prepend_module_to_snapshot(&self) -> bool
Returns the current value for module name prepending.
Sourcepub fn set_snapshot_suffix<I: Into<String>>(&mut self, suffix: I)
pub fn set_snapshot_suffix<I: Into<String>>(&mut self, suffix: I)
Sets the snapshot suffix.
The snapshot suffix is added to all snapshot names with an @
sign
between. For instance if the snapshot suffix is set to "foo"
and
the snapshot would be named "snapshot"
it turns into "snapshot@foo"
.
This is useful to separate snapshots if you want to use test
parameterization.
Sourcepub fn remove_snapshot_suffix(&mut self)
pub fn remove_snapshot_suffix(&mut self)
Removes the snapshot suffix.
Sourcepub fn snapshot_suffix(&self) -> Option<&str>
pub fn snapshot_suffix(&self) -> Option<&str>
Returns the current snapshot suffix.
Sourcepub fn set_input_file<P: AsRef<Path>>(&mut self, p: P)
pub fn set_input_file<P: AsRef<Path>>(&mut self, p: P)
Sets the input file reference.
This value is completely unused by the snapshot testing system but it lets you store some meta data with a snapshot that refers you back to the input file. The path stored here is made relative to the workspace root before storing with the snapshot.
Sourcepub fn remove_input_file(&mut self)
pub fn remove_input_file(&mut self)
Removes the input file reference.
Sourcepub fn input_file(&self) -> Option<&Path>
pub fn input_file(&self) -> Option<&Path>
Returns the current input file reference.
Sourcepub fn set_description<S: Into<String>>(&mut self, value: S)
pub fn set_description<S: Into<String>>(&mut self, value: S)
Sets the description.
The description is stored alongside the snapshot and will be displayed
in the diff UI. When a snapshot is captured the Rust expression for that
snapshot is always retained. However sometimes that information is not
super useful by itself, particularly when working with loops and generated
tests. In that case the description
can be set as extra information.
See also set_info
.
Sourcepub fn remove_description(&mut self)
pub fn remove_description(&mut self)
Removes the description.
Sourcepub fn description(&self) -> Option<&str>
pub fn description(&self) -> Option<&str>
Returns the current description
Sourcepub fn set_info<S: Serialize>(&mut self, s: &S)
pub fn set_info<S: Serialize>(&mut self, s: &S)
Sets the info.
The info
is similar to description
but for structured data. This is
stored with the snapshot and shown in the review UI. This for instance
can be used to show extended information that can make a reviewer better
understand what the snapshot is supposed to be testing.
As an example the input parameters to the function that creates the snapshot can be persisted here.
Alternatively you can use set_raw_info
instead.
Sourcepub fn set_raw_info(&mut self, content: &Content)
pub fn set_raw_info(&mut self, content: &Content)
Sets the info from a content object.
This works like set_info
but does not require serde
.
Sourcepub fn remove_info(&mut self)
pub fn remove_info(&mut self)
Removes the info.
Sourcepub fn set_omit_expression(&mut self, value: bool)
pub fn set_omit_expression(&mut self, value: bool)
If set to true, does not retain the expression in the snapshot.
Sourcepub fn omit_expression(&self) -> bool
pub fn omit_expression(&self) -> bool
Returns true if expressions are omitted from snapshots.
Sourcepub fn set_snapshot_path<P: AsRef<Path>>(&mut self, path: P)
pub fn set_snapshot_path<P: AsRef<Path>>(&mut self, path: P)
Sets the snapshot path.
If not absolute it’s relative to where the test is in.
Defaults to snapshots
.
Sourcepub fn snapshot_path(&self) -> &Path
pub fn snapshot_path(&self) -> &Path
Returns the snapshot path.
Sourcepub fn bind<F: FnOnce() -> R, R>(&self, f: F) -> R
pub fn bind<F: FnOnce() -> R, R>(&self, f: F) -> R
Runs a function with the current settings bound to the thread.
This is an alternative to bind_to_scope
which does not require holding on to a drop guard. The return value
of the closure is passed through.
let mut settings = Settings::clone_current();
settings.set_sort_maps(true);
settings.bind(|| {
// do stuff here
});
Sourcepub fn bind_async<F: Future<Output = T>, T>(
&self,
future: F,
) -> impl Future<Output = T>
pub fn bind_async<F: Future<Output = T>, T>( &self, future: F, ) -> impl Future<Output = T>
Like bind
but for futures.
This lets you bind settings for the duration of a future like this:
let settings = Settings::new();
settings.bind_async(async {
// do assertions here
}).await;
Sourcepub fn bind_to_scope(&self) -> SettingsBindDropGuard
pub fn bind_to_scope(&self) -> SettingsBindDropGuard
Binds the settings to the current thread and resets when the drop guard is released.
This is the recommended way to temporarily bind settings and replaces
the earlier bind_to_scope
and relies on
drop guards. An alterantive is bind
which binds
for the duration of the block it wraps.
let mut settings = Settings::clone_current();
settings.set_sort_maps(true);
let _guard = settings.bind_to_scope();
// do stuff here