我为我的项目设置了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;
知道错误与之相关吗?为什么代码中这么简单的改变会使测试通过?
答案 0 :(得分:1)
我已设法使用此。
文件:
特点:
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));
}
});
};