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