web-dev-qa-db-ja.com

ProtractorでJasmineとCucumberJSを使用する方法

プロジェクトのテストにProtractor、CucumberJS、Jasmineを使用したいと考えています。 Protractorで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/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();
  });
};

これが実行されたとき、 "期待"は定義されていません。これは、おそらくジャスミンが統合されておらず、それと共にグローバルに期待されているためと考えられます。ここに完全なエラーメッセージがあります:

$ $(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"
  }
}

注:最新バージョン(2.1.0)には バグ があり、CucumberJSとの統合ができないため、package.jsonのProtractor Gitリポジトリに特定のコミットを使用しています。

17

CucumberJSとJasmineは相互に排他的です。きゅうりの手順でジャスミンの期待を使用することはできません。代わりに、別の期待モジュールをロードする必要があります。 Chaichai-as-promised プラグインをお勧めします。 (約束通りのチャイは、約束の周りに期待を書き込むプロセスを簡略化します。分度器は、ジャスミンの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ドキュメント に従ってワールドにロードするだけで、ステップ定義がスコープされ、ワー​​ルドのすべてのプロパティにアクセスできるようになります。

module.exports = function() {

  this.World = require("path/to/world.js").World;

  this.Given(/^some precondition$/, function (callback) {
    this.expect(true).to.equal(true);
    callback();
  });
};

さて、恥知らずな自己宣伝のために:CucumberJSでProtractorを使用している場合は、ビルドに役立つ CukeFarm というモジュールを確認することをお勧めします。便利ないくつかのモジュールが事前構成されており、ほとんどすべてのプロジェクトで使用できるいくつかの一般的なステップ定義を提供します。

24
Nathan Thompson

Githubでこのプロジェクトを見てください https://github.com/DealerDotCom/protractor-jasmine-cucumber

0
Manoj