Skip to content

Commit 4abd3cb

Browse files
authored
test for codecept steps duration (#1459)
1 parent 46fdaf6 commit 4abd3cb

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

packages/allure-codeceptjs/test/spec/pageObject.test.ts

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,3 +517,99 @@ it("should support nested page object steps", async () => {
517517
],
518518
});
519519
});
520+
521+
it("should close page object steps before unrelated sibling steps", async () => {
522+
const { tests } = await runCodeceptJsInlineTest({
523+
"nested/login.test.js": `
524+
Feature("login-feature");
525+
Scenario("login-scenario1", ({ I, login }) => {
526+
login.onMainPage();
527+
I.delay(300);
528+
login.onMainPage();
529+
});
530+
`,
531+
"codecept.conf.js": `
532+
const path = require("node:path");
533+
const { setCommonPlugins } = require("@codeceptjs/configure");
534+
535+
setCommonPlugins();
536+
537+
exports.config = {
538+
tests: "./**/*.test.js",
539+
output: path.resolve(__dirname, "./output"),
540+
plugins: {
541+
allure: {
542+
require: require.resolve("allure-codeceptjs"),
543+
enabled: true,
544+
}
545+
},
546+
helpers: {
547+
CustomHelper: {
548+
require: "./helper.js",
549+
}
550+
},
551+
include: {
552+
login: './pages/login.js',
553+
}
554+
};
555+
`,
556+
"helper.js": `
557+
const Helper = require("@codeceptjs/helper");
558+
559+
class CustomHelper extends Helper {
560+
async pass() {
561+
await Promise.resolve();
562+
}
563+
564+
async delay(ms) {
565+
await new Promise((resolve) => setTimeout(resolve, ms));
566+
}
567+
}
568+
569+
module.exports = CustomHelper;
570+
`,
571+
"pages/login.js": `
572+
const { I } = inject();
573+
574+
module.exports = {
575+
onMainPage() {
576+
I.pass();
577+
}
578+
}
579+
`,
580+
});
581+
582+
expect(tests).toHaveLength(1);
583+
const [tr] = tests;
584+
const [firstPageStep, delayStep, secondPageStep] = tr.steps ?? [];
585+
586+
expect(firstPageStep).toMatchObject({
587+
name: "On login: on main page",
588+
status: Status.PASSED,
589+
steps: [
590+
{
591+
name: "I pass",
592+
status: Status.PASSED,
593+
},
594+
],
595+
});
596+
expect(delayStep).toMatchObject({
597+
name: "I delay 300",
598+
status: Status.PASSED,
599+
});
600+
expect(secondPageStep).toMatchObject({
601+
name: "On login: on main page",
602+
status: Status.PASSED,
603+
steps: [
604+
{
605+
name: "I pass",
606+
status: Status.PASSED,
607+
},
608+
],
609+
});
610+
611+
expect(firstPageStep.stop).toBeLessThanOrEqual(delayStep.start!);
612+
expect(delayStep.stop! - delayStep.start!).toBeGreaterThanOrEqual(250);
613+
expect(firstPageStep.stop! - firstPageStep.start!).toBeLessThan(250);
614+
expect(secondPageStep.stop! - secondPageStep.start!).toBeLessThan(250);
615+
});

0 commit comments

Comments
 (0)