intern.js重构到阻止行为之前不一致

时间:2015-06-24 01:33:45

标签: javascript testing bdd intern chai

我正在使用带有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();
});

所以我想推断出测试之间重复的很多逻辑。看起来下面的代码可能在前面的块中:

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块并将其存储为变量时,代码的行为不会像在一个长链接调用中而不是在前一个块中那样运行。我不确定我在这里做错了什么,因为我已经对我推断的内容进行了多次不同的迭代。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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