当前位置: 首页 > 面试题库 >

如何在量角器中使用Jasmine和CucumberJS

禹德水
2023-03-14
问题内容

我希望使用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'
  }
};

如您所见,该项目使用“黄瓜”作为框架。如何与CucumberJS一起添加Jasmine框架?是通过量角器配置文件还是代码中的其他位置?

/ path / to / myproj / 功能/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();
  });
};

执行此操作时,未定义“期望”,可能是因为Jasmine尚未集成,并且期望与它一起全局。这是完整的错误消息

$ $(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中对Protractor
Git存储库的特定提交,因为最新版本(2.1.0)有一个bug,阻止了与CucumberJS的集成。


问题答案:

CucumberJS和Jasmine是互斥的;您将无法在黄瓜步骤中使用Jasmine的期望。您要做的是加载一个单独的期望模块。我建议柴与应许的插件。(chai-as-promise简化了围绕诺言编写期望的过程。Protractor重写了expect()Jasmine
的功能以在后台为您执行此操作)您很可能希望在自己的世界中执行此操作,因为这是提供访问权限的最简单方法在您的步骤定义中。您的世界看起来像这样:

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文档加载到“世界”中,您将获得“步骤定义”的范围,以提供对“世界”所有属性的访问:

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的模块。它预配置了一些您会发现有用的模块,并且提供了许多可用于大多数项目的常规步骤定义。



 类似资料:
  • 我想用BDD风格编写Jasmine End2结束测试。从我所学到的,这意味着,我有四个方面: 功能 方案 刺激或事件 确保的结果 从我幼稚的观点来看,我将为“个别细节”特性创建一个测试,如下所示: 因此,是我的代码完全错误,还是实际上是记者?如果是这种情况,是否有其他选择,或者我是否需要以某种方式“扁平化”XML?

  • 问题内容: 今天,我一直在努力处理以下这些量角器代码行: 放在语句后似乎总是失败。 错误输出太模糊: UnknownError:JavaScript错误:等待结果时卸载文档 那么,单击超链接并检查新URL的正确方法是什么? 这是我的测试: 如果我在点击链接之前, 测试将通过。 如果我点击链接后, 上面的输出在Protractor中引发错误。什么地方出了错? 问题答案: 不用调用,而是 等待URL更

  • 我想为我使用protractor-jsamine框架构建的测试集成serenity报告。所做的所有探索只显示了serenity与量角器-Cucmber框架集成的结果。下面是我的配置文件示例。我应该添加什么来与宁静报告集成。目前我正在使用jasmine Reporter。

  • 问题内容: 我的角度应用程序中有一个服务,看起来像这样: 我不仅要对return语句中公开的功能/属性进行单元测试,还要对return语句之外的功能进行单元测试。 我的测试当前设置如下: 但是,如何测试return语句未公开的compare,filter和createBrackets函数? 谢谢! 问题答案: 无法测试这些功能。它们的范围是构成BracketService工厂的函数,在其他任何地方

  • 我在寻找一个解决方案,与反应形式的工作

  • 问题内容: 当我在循环中使用Protractor时,循环索引()不是我期望的。 症状: 失败:索引超出范围。尝试访问索引为’x’的元素,但是只有’x’个元素 要么 索引是静态的,并且始终等于最后一个值 我的密码 例如: 要么 要么 问题答案: 发生这种情况的原因是因为量角器使用了诺言。 阅读https://github.com/angular/protractor/blob/master/docs