【问题标题】:Cucumber tests pass without functionality existing黄瓜测试通过但功能不存在
【发布时间】:2015-03-18 19:47:52
【问题描述】:

我已经开始使用 Cucumber 为 Meteor 应用程序构建一个测试套件(遵循 http://joshowens.me/cucumber-js-and-meteor-the-why-and-how-of-it/)。一些测试在没有任何功能的情况下通过。

例如测试文件login.feature包括Feature: Allow users to login,有Scenario: A user can login with valid informationWhen I click on sign in link

文件loginSteps.js支持:

this.When(/^I click on sign in link$/, function (callback) {
    helper.world.browser.
        waitForExist('.at-signup', 7000).
        waitForVisible('.at-signup').
        click('.at-signup').
        call(callback);
});

登录按钮实际上有class="btn btn-default navbar-btn",但 Velocity 说测试在 858 毫秒内通过。另一个测试通过了url(helper.world.cucumber.mirror.rootUrl + "event/1"),虽然没有这样的 url。

但是,其他测试确实失败了,例如:

getText('.user-menu .dropdown-top-level', function (err, username) {
            assert.equal(username[0], 'userme');
        }).

有错误:

Then I should be logged in  Fail
 TypeError: Cannot read property '0' of undefined

有什么想法吗?

【问题讨论】:

  • 老实说,在没有看到固定装置或插入用户的任何东西的情况下,帮助您修复实际错误是很困难的。目前,Cucumber 的登录内容实际上很棘手,因为在您登录后浏览器会保留 cookie。您必须在测试结束或下一次测试开始时强制退出。

标签: node.js testing selenium meteor cucumber


【解决方案1】:

尝试在 getText 语句中执行 console.log(err)。我的猜测是你在运行它时没有找到匹配项。

试试这样的:

getText('.user-menu .dropdown-top-level', function (err, username) {
  if (err) {
    callback.fail(err.message);
  }
  assert.equal(username[0], 'userme');
}).

【讨论】:

  • 我认为它甚至不应该通过这个测试,因为在此之前的测试不应该通过,而是通过。我遇到的问题是,在此之前运行的测试,即“点击登录链接”测试,尽管登录按钮的类不正确,但仍然通过了。事实上,当我完全移除按钮时,它就通过了。所以测试在不应该通过的时候通过了。
  • 当我开始添加错误日志(并更加关注控制台)时,我看到出现了更多错误。堆栈显示 cucumber 正在报告通过控制台报告错误的测试。例如测试是:click('.at-signup'). 速度显示(绿色):When I click on sign in link 9390 ms 控制台日志:? (STDERR) Unable to find element with css selector '.at-signup'。不是特别有启发性,不知道该怎么办!
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多