Skip to content

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.

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

.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

}

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