如何在 Protractor 中使用 Jasmine 和 CucumberJS
How to use Jasmine and CucumberJS with Protractor
我希望使用 Protractor、CucumberJS 和 Jasmine 来测试我的项目。如何将 Jasmine 和 CucumberJS 与量角器一起使用?这是我创建的项目设置:
/path/to/myproj/protractor.conf.js
exports.config = {
seleniumServerJar: 'node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar',
specs: [
'features/*.feature'
],
baseUrl: 'http://localhost:8080',
multiCapabilities: [
{
'browserName': 'chrome'
}
],
allScriptsTimeout: 380000,
getPageTimeout: 20000,
framework: 'cucumber',
cucumberOpts: {
require: 'features/stepDefinitions.js',
format: 'summary'
}
};
如您所见,该项目使用"cucumber"作为框架。如何在 CucumberJS 旁边添加 Jasmine 框架?这是通过量角器配置文件还是代码中的其他地方?
/path/to/myproj/features/demo.feature
Feature: Some terse yet descriptive text of what is desired
Scenario: Some determinable business situation
Given some precondition
/path/to/myproj/features/stepDefinitions.js
module.exports = function() {
this.Given(/^some precondition$/, function (callback) {
expect(true).toEqual(true);
callback();
});
};
这个执行的时候,"expect"没有定义,估计是Jasmine没有集成,expect global也跟着一起。这是完整的错误消息:
$ $(npm bin)/protractor protractor.conf.js
Starting selenium standalone server...
[launcher] Running 1 instances of WebDriver
Selenium standalone server started at http://192.168.1.115:59957/wd/hub
(::) failed steps (::)
ReferenceError: expect is not defined
at World.<anonymous> (/path/to/myproj/features/stepDefinitions.js:3:5)
at process._tickCallback (node.js:355:11)
Failing scenarios:
/path/to/myproj/features/demo.feature:3 # Scenario: Some determinable business situation
1 scenario (1 failed)
1 step (1 failed)
Shutting down selenium standalone server.
[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1
/path/to/myproj/package.json
{
"name": "myproj",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"cucumber": "0.4.9",
"protractor": "git+https://github.com/angular/protractor.git#0262268fa43b9eefac815d986740efa07bb15818"
}
}
注意:我在我的 package.json 中使用了对量角器 Git 存储库的特定提交,因为最新版本 (2.1.0) 具有 a bug,这会阻止集成使用 CucumberJS。
CucumberJS 和 Jasmine 是互斥的;您将无法在 Cucumber 步骤中使用 Jasmine 的预期。您要做的是加载一个单独的期望模块。我会建议 Chai with the chai-as-promised 插件。 (chai-as-promised 简化了围绕 promises 编写期望的过程。Protractor 覆盖 Jasmine 中的 expect()
函数以在幕后为您执行此操作)很可能您会想在您的世界中执行此操作,因为那是在步骤定义中提供对它的访问的最简单方法。你的世界看起来像这样:
var World, chai, chaiAsPromised;
chai = require('chai');
chaiAsPromised = require('chai-as-promised');
World = function World(callback) {
chai.use(chaiAsPromised);
this.expect = chai.expect;
callback();
}
module.exports.World = World;
然后在您的步骤定义文件中,您只需根据 CucumberJS documentation 加载世界,您的步骤定义将被限定范围以提供对世界所有属性的访问:
module.exports = function() {
this.World = require("path/to/world.js").World;
this.Given(/^some precondition$/, function (callback) {
this.expect(true).to.equal(true);
callback();
});
};
现在,为了一些无耻的自我推销:如果您将 Protractor 与 CucumberJS 一起使用,我建议您查看一个我帮助构建的名为 CukeFarm 的模块。它预配置了一些您会发现有用的模块,并提供了许多可用于大多数项目的通用步骤定义。
看看github中的这个项目
https://github.com/DealerDotCom/protractor-jasmine-cucumber
我希望使用 Protractor、CucumberJS 和 Jasmine 来测试我的项目。如何将 Jasmine 和 CucumberJS 与量角器一起使用?这是我创建的项目设置:
/path/to/myproj/protractor.conf.js
exports.config = {
seleniumServerJar: 'node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar',
specs: [
'features/*.feature'
],
baseUrl: 'http://localhost:8080',
multiCapabilities: [
{
'browserName': 'chrome'
}
],
allScriptsTimeout: 380000,
getPageTimeout: 20000,
framework: 'cucumber',
cucumberOpts: {
require: 'features/stepDefinitions.js',
format: 'summary'
}
};
如您所见,该项目使用"cucumber"作为框架。如何在 CucumberJS 旁边添加 Jasmine 框架?这是通过量角器配置文件还是代码中的其他地方?
/path/to/myproj/features/demo.feature
Feature: Some terse yet descriptive text of what is desired
Scenario: Some determinable business situation
Given some precondition
/path/to/myproj/features/stepDefinitions.js
module.exports = function() {
this.Given(/^some precondition$/, function (callback) {
expect(true).toEqual(true);
callback();
});
};
这个执行的时候,"expect"没有定义,估计是Jasmine没有集成,expect global也跟着一起。这是完整的错误消息:
$ $(npm bin)/protractor protractor.conf.js
Starting selenium standalone server...
[launcher] Running 1 instances of WebDriver
Selenium standalone server started at http://192.168.1.115:59957/wd/hub
(::) failed steps (::)
ReferenceError: expect is not defined
at World.<anonymous> (/path/to/myproj/features/stepDefinitions.js:3:5)
at process._tickCallback (node.js:355:11)
Failing scenarios:
/path/to/myproj/features/demo.feature:3 # Scenario: Some determinable business situation
1 scenario (1 failed)
1 step (1 failed)
Shutting down selenium standalone server.
[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1
/path/to/myproj/package.json
{
"name": "myproj",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"cucumber": "0.4.9",
"protractor": "git+https://github.com/angular/protractor.git#0262268fa43b9eefac815d986740efa07bb15818"
}
}
注意:我在我的 package.json 中使用了对量角器 Git 存储库的特定提交,因为最新版本 (2.1.0) 具有 a bug,这会阻止集成使用 CucumberJS。
CucumberJS 和 Jasmine 是互斥的;您将无法在 Cucumber 步骤中使用 Jasmine 的预期。您要做的是加载一个单独的期望模块。我会建议 Chai with the chai-as-promised 插件。 (chai-as-promised 简化了围绕 promises 编写期望的过程。Protractor 覆盖 Jasmine 中的 expect()
函数以在幕后为您执行此操作)很可能您会想在您的世界中执行此操作,因为那是在步骤定义中提供对它的访问的最简单方法。你的世界看起来像这样:
var World, chai, chaiAsPromised;
chai = require('chai');
chaiAsPromised = require('chai-as-promised');
World = function World(callback) {
chai.use(chaiAsPromised);
this.expect = chai.expect;
callback();
}
module.exports.World = World;
然后在您的步骤定义文件中,您只需根据 CucumberJS documentation 加载世界,您的步骤定义将被限定范围以提供对世界所有属性的访问:
module.exports = function() {
this.World = require("path/to/world.js").World;
this.Given(/^some precondition$/, function (callback) {
this.expect(true).to.equal(true);
callback();
});
};
现在,为了一些无耻的自我推销:如果您将 Protractor 与 CucumberJS 一起使用,我建议您查看一个我帮助构建的名为 CukeFarm 的模块。它预配置了一些您会发现有用的模块,并提供了许多可用于大多数项目的通用步骤定义。
看看github中的这个项目 https://github.com/DealerDotCom/protractor-jasmine-cucumber