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

test_runner: emit start event when subtest starts #47797

Closed
wants to merge 8 commits into from

Conversation

sankalp1999
Copy link
Contributor

emit a start event to show message just after a test/subtest start

Fixes: #46727

@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-bot nodejs-github-bot added dont-land-on-v14.x needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. labels May 1, 2023
@sankalp1999 sankalp1999 marked this pull request as draft May 1, 2023 10:46
@sankalp1999
Copy link
Contributor Author

@MoLow I request your review.

@sankalp1999
Copy link
Contributor Author

sankalp1999 commented May 9, 2023

Thanks @MoLow. I have made a test:begin (name_to_be_decided) event in the test_streams file since test:start is already being used.

Not sure if I need to make changes in the textual output in the reporters as you mentioned "this means the event will only be usable through the run API but not via one of the existing reporters"

@MoLow
(#46727 (comment))

If code changes look fine, can proceed with doc changes and tests (a file pointer would be helpful in this case)

@sankalp1999 sankalp1999 marked this pull request as ready for review May 9, 2023 17:21
@@ -514,6 +514,7 @@ class Test extends AsyncResource {
}

async run() {

Copy link
Member

Choose a reason for hiding this comment

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

please revert unrelated change

@@ -27,6 +27,10 @@ class TestsStream extends Readable {
}
}

begin(nesting, file, testNumber, name, details, directive) {
Copy link
Member

Choose a reason for hiding this comment

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

does anything call this method?
I would start by adding this method to this test file, then make sure it passes

assert.match(stdout, /{"test:start":4,"test:pass":2,"test:fail":2,"test:plan":2,"test:diagnostic":\d+}$/);

Copy link
Contributor Author

Choose a reason for hiding this comment

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

no this is the new event so, not called anywhere yet.

@@ -27,6 +27,10 @@ class TestsStream extends Readable {
}
}

begin(nesting, file, testNumber, name, details, directive) {
this.#emit('test:begin', { __proto__: null, name, nesting, file, testNumber, details, ...directive });
Copy link
Contributor

Choose a reason for hiding this comment

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

Just throwing an idea out there: having both begin and start is confusing. I could also picture people asking for more of these lifecycle events. I would namespace this event further and name it test:lifecycle:run, where lifecycle can be used to indicate what is happening in the test runner and is less about reporting results.

@cjihrig
Copy link
Contributor

cjihrig commented May 24, 2023

@sankalp1999 are you still working on this?

@sankalp1999
Copy link
Contributor Author

sankalp1999 commented May 25, 2023

@cjihrig apologise, got busy with other stuff. Getting back to try this next.

@@ -27,6 +27,10 @@ class TestsStream extends Readable {
}
}

begin(nesting, file, testNumber, name, details, directive) {
this.#emit('test:lifecycle:run', { __proto__: null, name, nesting, file, testNumber, details, ...directive });
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

can remove ...directive I guess

@sankalp1999
Copy link
Contributor Author

Ok I saw upstream has changed significantly.

@sankalp1999 sankalp1999 force-pushed the test-runner-start-event branch from ee93ebc to d4b38f6 Compare May 25, 2023 17:08
@@ -29,6 +29,10 @@ class TestsStream extends Readable {
}
}

begin(nesting, file, testNumber, name, details) {
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
begin(nesting, file, testNumber, name, details) {
lifecycleRun(nesting, file, testNumber, name, details) {

@@ -97,7 +97,7 @@ describe('node:test reporters', { concurrency: true }, () => {
testFile]);
assert.strictEqual(child.stderr.toString(), '');
const stdout = child.stdout.toString();
assert.match(stdout, /{"test:start":4,"test:pass":2,"test:fail":2,"test:plan":2,"test:diagnostic":\d+}$/);
assert.match(stdout, /{"test:lifecycle:run":\d+,"test:start":4,"test:pass":2,"test:fail":2,"test:plan":2,"test:diagnostic":\d+}$/);
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
assert.match(stdout, /{"test:lifecycle:run":\d+,"test:start":4,"test:pass":2,"test:fail":2,"test:plan":2,"test:diagnostic":\d+}$/);
assert.match(stdout, /{"test:lifecycle:run":4,"test:start":4,"test:pass":2,"test:fail":2,"test:plan":2,"test:diagnostic":\d+}$/);

there should be a deterministic number of tests running

@MoLow
Copy link
Member

MoLow commented May 28, 2023

there seem to be related test failures

@@ -189,7 +189,7 @@ class Test extends AsyncResource {
this.nesting = 0;
this.only = testOnlyFlag;
this.reporter = new TestsStream();
this.reporter.begin(this.nesting, kFilename, this.testNumber, this.name, 'starting', 'starting');
// this.reporter.lifecycleRun(this.nesting, kFilename, this.testNumber, this.name, 'starting', 'starting');
Copy link
Contributor Author

Choose a reason for hiding this comment

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

will remove comments in next commit if CI passes.

@sankalp1999
Copy link
Contributor Author

CI was passing. Removed the comments.

I think I can proceed with the doc changes as well.

@sankalp1999 sankalp1999 force-pushed the test-runner-start-event branch from 85a46a4 to f7dbe8a Compare May 30, 2023 09:21
@@ -782,6 +782,8 @@ class Suite extends Test {
}

async run() {

Copy link
Member

@MoLow MoLow May 30, 2023

Choose a reason for hiding this comment

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

please revert

@@ -478,7 +478,7 @@ class Test extends AsyncResource {
this.parent.addPendingSubtest(deferred);
return deferred.promise;
}

this.reporter.lifecycleRun(this.nesting, kFilename, this.testNumber, this.name, 'starting', 'starting');
Copy link
Member

Choose a reason for hiding this comment

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

I think this should be emitted before the if

@@ -29,6 +29,10 @@ class TestsStream extends Readable {
}
}

lifecycleRun(nesting, file, testNumber, name, details) {
this[kEmitMessage]('test:lifecycle:run', { __proto__: null, name, nesting, file, testNumber, details });
Copy link
Member

Choose a reason for hiding this comment

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

I think test:enqueue is a better name, @cjihrig WDYT?

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't feel too strongly, but I wouldn't say "enqueue" just rolls off the tongue.

Copy link
Member

Choose a reason for hiding this comment

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

I agree, but in terms of distinction from test:start I think it is much better than test:lifecycle:run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Indicate when a test is started in test_runner
5 participants