Files
codex/prs/bolinfest/study/PR-1596-study.md
2025-09-02 15:17:45 -07:00

1.6 KiB
Raw Blame History

DOs

  • Put test-only crates under [dev-dependencies]: keeps runtime clean and avoids unnecessary transitive deps.
# core/Cargo.toml (right)
[dependencies]
uuid = { version = "1", features = ["serde", "v4"] }
# … other runtime deps …

[dev-dependencies]
walkdir = "2.5.0"  # used only in tests
  • Prefer Command::cargo_bin in tests: runs the built binary directly instead of spawning cargo run.
use assert_cmd::prelude::*;
use assert_cmd::Command;
use tempfile::TempDir;

let home = TempDir::new().unwrap();

Command::cargo_bin("codex-cli")
    .unwrap()
    .args([
        "exec",
        "--skip-git-repo-check",
        "-C",
        env!("CARGO_MANIFEST_DIR"),
        "echo integration-test-marker",
    ])
    .env("CODEX_HOME", home.path())
    .env("OPENAI_API_KEY", "dummy")
    .env("OPENAI_BASE_URL", "http://unused.local")
    .assert()
    .success();

DONTs

  • Dont add test-only crates to [dependencies]: this bloats the runtime dependency graph.
# core/Cargo.toml (wrong)
[dependencies]
walkdir = "2.5.0"  # ❌ test-only; should be under [dev-dependencies]
  • Dont shell out to cargo run from tests unless theres a compelling reason.
// ❌ Avoid this in tests
use assert_cmd::Command as AssertCommand;

let mut cmd = AssertCommand::new("cargo");
cmd.arg("run")
   .arg("-p").arg("codex-cli")
   .arg("--")
   .arg("exec")
   .arg("--skip-git-repo-check")
   .arg("-C").arg(env!("CARGO_MANIFEST_DIR"))
   .arg("echo integration-test-marker");

// Prefer Command::cargo_bin(...) instead (see DOs).