Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: ignore workspace root when running pytest #858

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions rye/src/cli/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ pub struct Args {
#[arg(short, long)]
all: bool,
/// Perform the operation on a specific package
#[arg(short, long)]
#[arg(short, long, conflicts_with = "all")]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not necessary but I think it makes sense to conflict both

package: Vec<String>,
/// Use this pyproject.toml file
#[arg(long, value_name = "PYPROJECT_TOML")]
Expand Down Expand Up @@ -67,7 +67,7 @@ pub fn execute(cmd: Args) -> Result<(), Error> {
.join("pytest")
.with_extension(EXE_EXTENSION);

let projects = locate_projects(project, cmd.all, &cmd.package[..])?;
let projects = locate_projects(project, cmd.all | cmd.package.is_empty(), &cmd.package[..])?;
Copy link
Contributor Author

@hyyking hyyking Mar 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Covers 3 branches in the workspace case:

  • rye test --all: all pyprojects are returned
  • rye test: before would only return the root -> now returns the same as --all
  • rye test -p <workspace_project>: returns the matched projects

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that rye test should run all. It was intended to only run the tests of the package you are in. That is consistent with fmt and lint.

Copy link
Contributor Author

@hyyking hyyking Mar 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I went by the cargo test implementation.

Although I see your point running pytests at the root directory would collect ANY test file such as exposed in #853 and #893

I see three options:

  • Assume the default test directory is tests and allow the user to override with a rye.test-directory property
  • Run all the packages in the workspace like cargo test (as implemented)
  • Leave it to the user to configure tool.pytest like in Ignore target when running pytest in rye #893


if !pytest.is_file() {
let has_pytest = has_pytest_dependency(&projects)?;
Expand All @@ -83,6 +83,9 @@ pub fn execute(cmd: Args) -> Result<(), Error> {
}

for (idx, project) in projects.iter().enumerate() {
if project.workspace().is_some() && project.is_workspace_root() {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is_workspace_root would return true if it was single package so we need to ask for the workspace

continue;
}
if output != CommandOutput::Quiet {
if idx > 0 {
println!();
Expand Down