insta
insta copied to clipboard
`cargo insta test` does not work for inline doc assert
What happened?
When trying to update snapshots located in doc comments, insta recognizes that the snapshot is incorrect, but fails to prompt for review and creates a .pending file.
Reproduction steps
Snippet:
/// ```rust
/// use insta::assert_debug_snapshot;
///
/// assert_debug_snapshot!("abc", @r###""###);
/// ```
#[derive(Debug)]
pub struct A;
cargo insta test -- --docORcargo test --doc- When
cargo test --docwas run insrc/a new file was created:.lib.rs.pending-snapwith the following contents:
{"run_id":"1660578077-420954000","line":5,"new":{"module_name":"rust_out","snapshot_name":"_doctest_main_src_lib_rs_2_0","metadata":{"source":"src/lib.rs","assertion_line":5,"expression":"\"abc\""},"snapshot":"\"abc\""},"old":{"module_name":"rust_out","metadata":{},"snapshot":""}}
cargo insta review
results in: done: no snapshots to review
Insta Version
insta v1.18.2
rustc Version
rustc 1.65.0-nightly (801821d15 2022-08-14)
What did you expect?
That insta would update the snapshot and prompt for review, or at least show a warning or note that such an operation isn't supported.
Is this behavior intended? What should I do instead? Thanks for creating such a valuable and great tool! I have used it in a few projects, and it's been great so far!
Unfortunately rust does not have correct line information within doctests (https://github.com/rust-lang/rust/issues/79417) which makes it impossible to reliably reproduce the original location. In theory the offset to the doctest can be calculated from the function name as it encodes currently the offset to the doctest there, however the internally added preamble is not known and not consistent.
I will add a warning and avoid emitting the pending snapshot though, that can be detected.
This warning is also incorrectly triggered when using cargo test instead of cargo insta test on tests that can actually be updated.
@konstin what's an example of that?