0

我有以下使用 CodeceptJS 编写的验收测试套件,它工作正常。我使用Before在每个步骤之前登录。问题是该Before功能相当于 Mocha 的beforeEach,而不是 Mocha 的before,我真正想要的是让一些代码只运行一次,因为这个登录步骤需要一些时间才能完成。

我希望最终得到一个运行一次并从 javascript 获取 loginToken 的函数,然后我可以在接下来的Before每个测试之前使用一个函数来设置它。关于如何做到这一点的任何线索?

Feature('Top level-routes');

Before((I) => {
  const loginBtnText = 'LOG IN';

  I.amOnPage('/login');
  I.fillField('username', 'root');
  I.fillField('password', 'mypass');
  I.see(loginBtnText);
  I.seeElementInDOM('[name=loginBtn]');
  I.click('loginBtn');

  // I don't understand why I need to wait for the click to register
  // but nothing happens unless I do ...
  I.wait(1);
  I.dontSee(loginBtnText);
});

Scenario('a page to add a new encounter should be rendered', (I) => {
  I.amOnPage('/encounter/new');
  I.wait(2);
  I.see('First');
  I.see('Last');
});

Scenario('a page to add a new user should be rendered', (I) => {
  I.amOnPage('/user/new');
  I.wait(2);
  I.see('Personalia');
})

PS我确实意识到我可能可以使用一些外部状态来解决这个问题,以检查该函数是否之前运行过,但还没有能够做到这一点。支持最不老套的答案:)

4

1 回答 1

0

你可以有一个自定义的 CodeceptJS 助手,在那里你可以使用以下这些方法,

_init - 在所有测试之前, _before - 在测试之前

参考:http ://codecept.io/helpers/

于 2017-06-23T13:59:51.223 回答