intern.js 重构到块前行为不一致

intern.js refactoring to before block behavior not consistent

我正在使用带有 Chai 和 BDD 的 intern.js 库来测试我的 javascript 应用程序。我有以下代码:

// Login as admin
bdd.before(function() {
  indexPage = new IndexPage(this.remote, adminUsername, adminPass);
});

bdd.it('should turn a user to an input box', function () {
  return indexPage.login(baseUrl)
    .clearLocalStorage()
    .get(baseUrl + '#/details')
    .findAllByCssSelector('.user-filter')
    .findByName('user')
    .clearValue()
    .click().pressKeys(['Functional Test', '\uE015', '\uE006'])
    .end()
    .findByXpath('//td[@class="grid-column-user"]/span')
    .click()
    .end()
    .findByXpath('//td[@class="grid-column-user"]/input')
      .then(function (elem) {
        assert.lengthOf(elem, 1, "Yay");
      })
    .end();
});

bdd.it('should get the error state class when incorrect input is added', function () {
  return indexPage.login(baseUrl)
    .clearLocalStorage()
    .get(baseUrl + '#/details')
    .findAllByCssSelector('.user-filter')
    .findByName('user')
    .clearValue()
    .click().pressKeys(['Functional Tes', '\uE015', '\uE006'])
    .end()
    .findByXpath('//td[@class="grid-column-user"]/span')
    .click()
    .pressKeys(['adsf', '\uE006'])
    .end()
    .findByXpath('//td[@class="grid-column-user"]/input[@class="user-error"]')
      .then(function (elem) {
        assert.lengthOf(elem, 1, "User should be input");
      })
    .end();
});

所以我想推断出很多在测试之间重复的逻辑。似乎以下代码可能在 before 块中:

bdd.before(function() {
  indexPage = new IndexPage(this.remote, adminUsername, adminPass);
  testUser = indexPage.login(baseUrl)
    .clearLocalStorage()
    .get(baseUrl + '#/details')
    .findAllByCssSelector('.user-filter')
    .findByName('user')
    .clearValue()
    .click().pressKeys(['Functional Test', '\uE015', '\uE006'])
});

bdd.it('should get the error state class when incorrect input is added',      function () {
  return testUser.end()
    .findByXpath('//td[@class="grid-column-user"]/span')
    .click()
    .pressKeys(['adsf', '\uE006'])
    .end()
    .findByXpath('//td[@class="grid-column-user"]/input[@class="user-error"]')
      .then(function (elem) {
        assert.lengthOf(elem, 1, "User should be input");
      })
    .end();
});

当我将此代码放入 before 块并将其存储为变量时,代码的行为并不像在一个长链调用中而不是在块之前。我不确定我在这里做错了什么,因为我已经对我推断出的内容进行了多次不同的迭代。

谢谢!

在您的原始代码中,您通过登录到新会话并清除本地存储来重置每个测试的页面状态。在您的新代码中,您只在套件的开头执行一次,因此套件中的所有测试都将在测试页面的同一会话中 运行。

要复制原始测试的行为,请使用 beforeEach 而不是 before