insta icon indicating copy to clipboard operation
insta copied to clipboard

`cargo insta test` does not work for inline doc assert

Open indietyp opened this issue 3 years ago • 3 comments

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;
  1. cargo insta test -- --doc OR cargo test --doc
  2. When cargo test --doc was run in src/ a new file was created: .lib.rs.pending-snap with 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":""}}
  1. 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!

indietyp avatar Aug 15 '22 15:08 indietyp

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.

mitsuhiko avatar Aug 16 '22 09:08 mitsuhiko

This warning is also incorrectly triggered when using cargo test instead of cargo insta test on tests that can actually be updated.

konstin avatar Sep 22 '23 12:09 konstin

@konstin what's an example of that?

max-sixty avatar May 02 '24 04:05 max-sixty