Skip to content

Can't implement BeforeSuite and AfterSuite in tests #232

@APshenkin

Description

@APshenkin

Hi every one!

I was tried to implement new feature in CodeceptJS: BeforeSuite and AfterSuite hooks in Feature spec (check #231). But I faced with two problems:
1. CodeceptJS doesn't wait while BeforeSuite hook finished. It starts the test scenario in parallel with hook. (There was my fault. The syncDown method doesn't not complete GET request synchronously. Fixed)
2. AfterSuite will not be called if there is any failed scenario in suite (BTW already implemented After hook has the same problem.)

Below is stacktrace for my simple test in --verbose mode

C:\Users\andrey.pshenkin\git\4game-feature-tests > npm run codeceptjs -- --grep=system-acc-4

> 4game-feature-tests@ codeceptjs C:\Users\andrey.pshenkin\git\4game-feature-tests
> codeceptjs run --verbose "--grep=system-acc-4"

Using codecept.js as configuration is deprecated, please rename it to codecept.conf.js
CodeceptJS v0.4.5
Using test root "C:\Users\andrey.pshenkin\git\4game-feature-tests"

   [1] Starting recording promises
 > WebDriverIO._beforeSuite
   [1] Queued | hook WebDriverIO._beforeSuite()
 > WebdriverCSS._beforeSuite
   [1] Queued | hook WebdriverCSS._beforeSuite()
   [1] Queued | () => done()
referral-system-acc-4-qa-unauth. --
   [2] Starting recording promises
   Emitted | suite.before
 > WebDriverIO._beforeSuite
   [2] Queued | hook WebDriverIO._beforeSuite()
 > WebdriverCSS._beforeSuite
   [2] Queued | hook WebdriverCSS._beforeSuite()
   [2] Queued | syncDown: 4game-referral-system
   Emitted | step.before (I sync down "4game-referral-system")
 * I sync down "4game-referral-system"
   Emitted | step.after (I sync down "4game-referral-system")
 test1
   [3] Starting recording promises
   Emitted | test.before
 > WebDriverIO._before
   [3] Queued | hook WebDriverIO._before()
 > WebdriverCSS._before
   [3] Queued | hook WebdriverCSS._before()
   Emitted | test.start ([object Object])
   [3] Queued | amOnPage: /summon/
   [3] Queued | seeCurrentUrlEquals: /summon/
   [3] Queued | finish test
   Emitted | step.before (I am on page "/summon/")
 * I am on page "/summon/"
   Emitted | step.after (I am on page "/summon/")
 > [Url] https://ru.4gametest.com/summon/
   Emitted | step.before (I see current url equals "/summon/")
 * I see current url equals "/summon/"
   Emitted | step.after (I see current url equals "/summon/")
 √ OK in 13566ms

   Emitted | test.after
 > WebDriverIO._after
   [3] Queued | hook WebDriverIO._after()
 > WebdriverCSS._after
   [3] Queued | hook WebdriverCSS._after()
 test2
   [4] Starting recording promises
   Emitted | test.before
 > WebDriverIO._before
   [4] Queued | hook WebDriverIO._before()
 > WebdriverCSS._before
   [4] Queued | hook WebdriverCSS._before()
   Emitted | test.start ([object Object])
   [4] Queued | amOnPage: /summon/
   [4] Queued | seeCurrentUrlEquals: /summon/test
   [4] Queued | finish test
   Emitted | step.before (I am on page "/summon/")
 * I am on page "/summon/"
   Emitted | step.after (I am on page "/summon/")
 > [Url] https://ru.4gametest.com/summon/
   Emitted | step.before (I see current url equals "/summon/test")
 * I see current url equals "/summon/test"
   Emitted | step.after (I see current url equals "/summon/test")
   [4] Error | Error
   [4] Starting <teardown> session
   Emitted | test.failed ([object Object])
 > WebDriverIO._failed
   [4] <teardown> Queued | hook WebDriverIO._failed()
 > WebdriverCSS._failed
   [4] <teardown> Queued | hook WebdriverCSS._failed()
   [4] <teardown> Queued | () => done(err)
   [4] <teardown> Stopping recording promises
 > Screenshot has been saved to C:\Users\andrey.pshenkin\git\4game-feature-tests\output\test2.failed.png
 × FAILED in 12287ms

   Emitted | test.after
 > WebDriverIO._after
   [4] <teardown> Queued | hook WebDriverIO._after()
 > WebdriverCSS._after
   [4] <teardown> Queued | hook WebdriverCSS._after()
   Emitted | suite.after
 > WebDriverIO._afterSuite
   [4] <teardown> Queued | hook WebDriverIO._afterSuite()
 > WebdriverCSS._afterSuite
   [4] <teardown> Queued | hook WebdriverCSS._afterSuite()
   [5] Starting recording promises
 > WebDriverIO._afterSuite
   [5] Queued | hook WebDriverIO._afterSuite()
 > WebdriverCSS._afterSuite
   [5] Queued | hook WebdriverCSS._afterSuite()
   [5] Queued | () => done()

-- FAILURES:

  1) referral-system-acc-4-qa-unauth.: 
test2:
     expected url of current page '/summon/test' to equal 'https://ru.4gametest.com/summon/'

  Scenario Steps:

  - I.seeCurrentUrlEquals("/summon/test") at Test.<anonymous> (C:\Users\andrey.pshenkin\git\4game-feature-tests\tests\4game-referral-system\referral-system-acc-4-qa-unauth_test.js:39:7)
  - I.amOnPage("/summon/") at Test.<anonymous> (C:\Users\andrey.pshenkin\git\4game-feature-tests\tests\4game-referral-system\referral-system-acc-4-qa-unauth_test.js:38:7)

  undefined:



  FAIL  | 1 passed, 1 failed   // 39s
   Emitted | global.result ([object Object])

npm ERR! Windows_NT 10.0.10586
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "codeceptjs" "--" "--grep=system-acc-4"
npm ERR! node v4.5.0
npm ERR! npm  v2.15.9
npm ERR! code ELIFECYCLE
npm ERR! 4game-feature-tests@ codeceptjs: `codeceptjs run --verbose "--grep=system-acc-4"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the 4game-feature-tests@ codeceptjs script 'codeceptjs run --verbose "--grep=system-acc-4"'.
npm ERR! This is most likely a problem with the 4game-feature-tests package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     codeceptjs run --verbose "--grep=system-acc-4"
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs 4game-feature-tests
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!
npm ERR!     npm owner ls 4game-feature-tests
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Users\andrey.pshenkin\git\4game-feature-tests\npm-debug.log
C:\Users\andrey.pshenkin\git\4game-feature-tests >

Here is my test in normal view

Feature('referral-system-acc-4-qa-unauth.');

BeforeSuite((I) => {
    I.syncDown('4game-referral-system');
});

AfterSuite((I) => {
    I.syncUp();
})

Scenario('test1', (I, referralPage, genericPage) => {
    I.amOnPage('/summon/');
    I.seeCurrentUrlEquals('/summon/');
});

Scenario('test2', (I, referralPage, genericPage) => {
    I.amOnPage('/summon/');
    I.seeCurrentUrlEquals('/summon/test');
});

During my test I try to sync down files from the remote server and after test suite sunc up files to the remote server
BeforeSuite completes during first test and AfterSuite doesn't run at all.

Here is my code for this feature
#231

Thanks in advance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions