0

Here is the error:

let tmp = tempdir::TempDir::new("cargo_test").expect("failed to create tempdir");
          ^^^^^^^ use of undeclared crate or module `tempdir`

My cargo.toml looks like this:

#...
[dev-dependencies]
tempdir = "0.3.7

And in the code:

let path = if cfg!(test) {
            let tmp = tempdir::TempDir::new("cargo_test").expect("failed to create tempdir");
            tmp.path().to_str().map(|x| x.to_string()).unwrap_or(path)
        } else {
            path
        };

I do not understand why it fails, when i run cargo test. :(

Jitterbug
  • 302
  • 1
  • 11

1 Answers1

2

The cfg! macro evaluates to a constant true or false depending on the contents, so on non-test builds it evaluates to

let path = if false {
    let tmp = tempdir::TempDir::new("cargo_test").expect("failed to create tempdir");
    tmp.path().to_str().map(|x| x.to_string()).unwrap_or(path)
} else {
    path
};

which still has the dependency in it, and will type check everything and so it sees the missing crate. Instead you have to remove the whole first block from compilation:

#[cfg(test)]
let path = {
    let tmp = tempdir::TempDir::new("cargo_test").expect("failed to create tempdir");
    tmp.path().to_str().map(|x| x.to_string()).unwrap_or(path)
};
cafce25
  • 15,907
  • 4
  • 25
  • 31