【问题标题】:Expect() not doing the comparison when using BDD使用 BDD 时 Expect() 不进行比较
【发布时间】:2018-08-30 06:48:39
【问题描述】:

我正在使用 Protractor 5.4.0 和 cucumber。

protractor.conf.js 文件是:

global.expect = require('chai').expect;
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub', // This is targetting your local running instance of the selenium webdriver

    specs: [
        '../Features/UI_Tests.feature'
    ],

    capabilities: {
        browserName: 'chrome' // You can use any browser you want. On a CI environment you're going to want to use PhantomJS
    },

    framework: 'custom', //We need this line to use the cucumber framework

    frameworkPath: require.resolve('protractor-cucumber-framework'), // Here it is

    cucumberOpts: {
        //format:  'pretty',
        require: '../Features/step_definitions/my_steps.js', // This is where we'll be writing our actual tests
        // tags: ['@basic'],
        strict: true,
        plugin:"json"
    },
    resultJsonOutputFile:'./testResults.json', //output file path to store the final results in .json format
    params: {
        env: {
            hostname: 'http://0.0.0.0:8000' // Whatever the address of your app is
        }
    }
};

我用一些例子定义了这个场景:

Scenario Outline: dropdown boxes appear and work as expected.
    When go to "URL"
    Then application is running
    When click <box>
    Then <option> is present in <box>

    Examples:
      |box| option|
      |templateSelection| Apparent Energy |
      |templateDeliveryPathSelection| Email |
      |templateLocaleSelection| English |

我正在使用这段代码来检查下拉框的文本是否与选项列相同:

checkDropdown: function (value,dropdown) {
        var text = element(by.id(dropdown)).getText();
        expect(text).to.eventually.equal(value);
    },

它似乎工作正常,因为输出通知所有场景都已通过。但是,如果我们更改“选项”列中的任何值使其失败,则输出相同,所有场景都通过。为什么?

提前致谢。

【问题讨论】:

  • 检查您的chai 版本是否与chai-as-promised 兼容。

标签: javascript angularjs protractor angular-promise cucumberjs


【解决方案1】:

试试:

checkDropdown: function (value,dropdown) {
        var text = element(by.id(dropdown)).getText();
        return expect(text).to.eventually.equal(value);
}

这是因为您没有返回期望值。你总是必须在你的步骤定义中返回一个承诺。如果函数返回 undefined 它将通过。

如果您使用这两种技术来节省大量样板文件和工作量,我强烈建议您使用https://github.com/canvaspixels/cucumber-protractor。您可以保留现有测试并逐步迁移。

这里有一个演示视频:https://www.youtube.com/watch?v=5vuYL4nxMXs

【讨论】:

  • 感谢您的回答,但是……您的代码和我的代码有什么区别?我认为是一样的。提前致谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2017-12-09
  • 2012-10-18
  • 2012-01-14
  • 2014-11-29
  • 2014-08-23
相关资源
最近更新 更多