javascript - intern.js 重构到 block 行为不一致之前

标签 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();
});

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

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

谢谢!

最佳答案

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

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

关于javascript - intern.js 重构到 block 行为不一致之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016157/

相关文章:

javascript - 从文档中删除对象

javascript - 在继续 for 循环之前等待回调

testing - 没有 LocalTesting 的 BrowserStack 上的 TestCafe?

.net - 处理 SpecFlow 中的多个细微变化

javascript - HTML5 等待 Canvas 加载然后查找 base64

javascript - 从子进程中的 Promise.then 触发父进程中的 setState 函数

java - 在测试失败之前尝试在 before() 方法上运行重试

android & 使用 Robotium 进行测试,如何在 fragment 中选择 listView 的元素?

cucumber - 将外部数据源与 Cucumber 特征文件集成

loops - 如何循环遍历 Karate 功能中的数组值