2

我正在为我的项目设置 cucumber.js 测试。我按照此处提供的教程进行操作:http: //cloudspace.com/blog/2014/11/25/cucumber/#.VYe4w87sNRE我也尝试了其他教程,但它们都非常相似并导致了同样的问题。

我有一个功能文件:

Feature: Example feature
 As a user of cucumber.js
 I want to have documentation on cucumber
 So that I can concentrate on building awesome applications

 Scenario: Reading documentation
   Given I am on the Cucumber.js GitHub repository
   When I go to the README file
   Then I should see "Usage" as the page title

和步骤定义:

'use strict';

module.exports = function () {
   this.World = require("../../support/world.js").World; 

    this.Given(/^I am on the Cucumber.js GitHub repository$/, function (callback) {

      this.visit('http://github.com/cucumber/cucumber-js', callback);
    });

    this.When(/^I go to the README file$/, function (callback) {

      callback.pending();
    });

    this.Then(/^I should see "(.*)" as the page title$/, function (title, callback) {

      var pageTitle = this.browser.text('title');
      if (title === pageTitle) {
        callback();
      } else {
        callback.fail(new Error("Expected to be on page with title " + title));
      }
    });
  };

以及以下 word.js 文件:

'use strict';

var zombie = require('zombie');
function WorldFactory(callback) {

  var browser = new zombie();

  var world = {
    browser: browser,                       
    visit: function (url, callback) { 
      this.browser.visit(url, callback);
    }
  };

  callback(world); 
}
exports.World = WorldFactory;

当我运行它时,场景的第一步失败,我可以看到以下错误:

 Scenario: Reading documentation # features/sample.feature:6
 { [TypeError: undefined is not a function] filename: undefined }
 { [ReferenceError: $ is not defined] filename: undefined }
     Given I am on the Cucumber.js GitHub repository # features/sample.feature:7
       TypeError: undefined is not a function
           at <anonymous>:9:1625
           at <anonymous>:9:1814
           at <anonymous>:9:2704
           in https://github.com/cucumber/cucumber-js
     When I go to the README file                    # features/sample.feature:8
     Then I should see "Usage" as the page title     # features/sample.feature:9

(::) failed steps (::)

TypeError: undefined is not a function
    at <anonymous>:9:1625
    at <anonymous>:9:1814
    at <anonymous>:9:2704
    in https://github.com/cucumber/cucumber-js

但是,当我更改 world.js 文件,以便将另一个函数(在该函数中调用回调方法)传递给僵尸访问方法时,该步骤通过(但我仍然得到错误)。这是更改后的文件:

'use strict';

var zombie = require('zombie');
function WorldFactory(callback) {

  var browser = new zombie();

  var world = {
    browser: browser,
    visit: function (url, callback) {
      this.browser.visit(url, function() {
            callback();
        });
    }
  };

  callback(world); 
}
exports.World = WorldFactory;

知道错误与什么有关吗?为什么对代码进行如此简单的更改会使测试通过?

4

1 回答 1

1

我已经设法使它与this一起工作。

文件:

特征:

Feature: laboradmin Website
As a user of laboradmin
I want to visit the portal

Scenario: Opening the portal
  Given I am using a browser
  When I visit the laboradmin homepage
  Then I should see "laboradmin" as the page title

世界:

'use strict';

var zombie = require('zombie');
function WorldFactory(callback) {

    this.browser = new zombie();
    var self = this;
    this.world = {
        browser: self.browser,
        visit: function (url, callback) {
            this.browser.visit(url, function () {
                callback();
            });
        }
    };

}
exports.World = WorldFactory;

步骤定义:

module.exports = function () {
    this.World = require('../support/world').World;

    this.Given(/^I am using a browser$/, function (callback) {
        // Express the regexp above with the code you wish you had. Call callback() at the end
        // of the step, or callback.pending() if the step is not yet implemented:
        callback();


    });

    this.When(/^I visit the laboradmin homepage$/, function (callback) {
        // Express the regexp above with the code you wish you had.
        // `this` is set to a World instance.
        // i.e. you may use this.browser to execute the step:
        this.world.visit('http://localhost/laboradmin/dist/#/', callback);
// The callback is passed to visit() so that when the job's finished, the next step can
        // be executed by Cucumber.
    });

    this.Then('I should see "$title" as the page title', function (title, callback) {
        // the above string is converted to the following Regexp by Cucumber:
        // /^I should see "([^"]*)" as the page title$/

        var pageTitle = this.world.browser.text('title');
        if (title === pageTitle) {
            callback();
        } else {
            callback(new Error("Expected to be on page with title " + title + "\n but page title is: " + pageTitle));
        }
    });
};
于 2015-12-08T08:47:04.023 回答