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

Conversation

hyyking
Copy link
Contributor

@hyyking hyyking commented Mar 9, 2024

Fixes #853

Description

When running within a workspace pytest will be run from the project root collecting everything in the workspace tree, including the unselected packages(if root is selected) and packages/folders not managed in the workspace (if all selected).

Open Questions

It might the interesting to have a rye.test-folder pyproject attribute so we could have workspace tests.

rye/src/cli/test.rs Outdated Show resolved Hide resolved
@@ -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

@@ -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

@@ -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

@hyyking hyyking requested a review from mitsuhiko March 12, 2024 18:58
@@ -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
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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Rye test is not scoped to workspace members
2 participants