Here's a simplified version of my funciton:
async fn show_status(root_dir: &PathBuf, mut output: impl std::io::Write) -> Result<(), Error> {
writeln!(output, "status:");
let mut commponent_ids = walk_components(&StatusVisitor::new(), &root_dir, None).await?;
writeln!(output, "ids: {:?}", commponent_ids);
output.flush();
Ok(())
}
And this is my test case:
#[cfg(test)]
mod tests {
use super::show_status;
#[tokio::test]
async fn test_show_status() {
let mut output = Vec::new();
show_status(&main_repo_dir, &mut output).await;
assert_eq!(std::str::from_utf8(output.as_slice()).unwrap(), "status:\nids: [0, 1]");
}
}
I think the case may pass as expected, but the fact is that I got following failure:
assertion `left == right` failed
left: "status:\n"
right: "status:\nids: [0, 1]\n"
I have no idea why the second line can not be seen in the output. Can anyone give me some help?
I have asked chatgpt and it told me to use the traits tokio::io::AsyncWriteExt
instead of std::io::Write
. But when I tried the solution, nothing changed.
I have also tried that call the funciton in main funciton directly instead of calling it in a testcase. Unexpectedly, I works properly. I saw both 2 lines in the stdout.
So my problem is: What happened with the testcase? Why can't I seen the second line in the output in a async testcase?