2016-07-15 13 views
3

キュウリと分度器を使用してサンプルのBDDテストを行いました。コードを実行すると、コンソールには結果がすぐに渡され、コードは実際に実行され始めます。分度器キュウリBDDテスト実行前に合図を表示

実行状態の表示を実際の実行と同期させたい(例えば、コンソール表示 - '私は分度器デモページを起動し、その下のコードが実行され、コンソールに次の手順が表示されます)それが非同期コーディングとコールバックと関係があることを知っていますが、正確な問題を把握することはできません。

フィーチャーファイル:

Feature: Test 
Scenario: Test Scenario 
    Given I launch the protractor demo page 
    When I enter two in the first field 
    And I enter three in the second field 
    And I click Go button 
    Then Result should be displayed as Five 

STEPファイル:

var chai = require('chai'); 
    var chaiAsPromised = require('chai-as-promised'); 
    chai.use(chaiAsPromised); 
    var expect = chai.expect; 

    module.exports = function() { 


     this.Given(/^I launch the protractor demo page$/, function (callback) { 
      browser.driver.manage().window().maximize(); 
      browser.get('http://juliemr.github.io/protractor-demo/'); 

      browser.getTitle().then(function(text){ 
       console.log('title is - ' + text); 
       expect(text).to.equal('Super Calculator'); 
      }); 
     callback(); 
     }); 

     this.When(/^I enter two in the first field$/, function (callback) { 
      element(by.model('first')).sendKeys('2'); 
      callback(); 
     }); 

     this.When(/^I enter three in the second field$/, function (callback) { 
      element(by.model('second')).sendKeys('3'); 
      callback(); 
     }); 

     this.When(/^I click Go button$/, function (callback) { 
      element(by.id('gobutton')).click(); 
      callback(); 
     }); 

     this.Then(/^Result should be displayed as Five$/, function (callback) { 
      element(by.repeater('result in memory')).all(by.tagName('td')).get(2).getText().then(function(text){ 
      expect(text).to.equal('5'); 
      }); 
      callback(); 
     }); 

    }; 
+0

分度器のバージョンは3.3.0です – Manya

答えて

5

あなたはreturn約束したり、ステップの定義でdoneコールバックを使用するかする必要があります。さもなければ、キュウリはあなたの非同期アクションが完了したときを知らない。

私は同じ質問をしており、上記の文章はprotractor-cucumber githubフォーラムの中核メンバーからの回答でした。

私は.then機能と結果のいくつかのアクションを実行すると、私はないですとき、また、あなたが今callbacksを必要としないCucumberJSは約束をサポート.doneコールバック関数を使用していたとき、私はreturn約束することを好みます。だからあなたのステップファイルは、のようになります - それは、彼らが時々難しいことができbehave.Theyどのようにいくつかの理解を必要とするため、私はおよそPromiseshttp://www.html5rocks.com/en/tutorials/es6/promises/を読むためにあなたをお勧めします

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 
var expect = chai.expect; 

module.exports = function() { 


    this.Given(/^I launch the protractor demo page$/, function() { 
     browser.driver.manage().window().maximize(); 
     browser.get('http://juliemr.github.io/protractor-demo/'); 

     return browser.getTitle().then(function(text){ 
      console.log('title is - ' + text); 
      expect(text).to.equal('Super Calculator'); 
     }); 
    }); 

    this.When(/^I enter two in the first field$/, function() { 
     return element(by.model('first')).sendKeys('2'); 
    }); 

    this.When(/^I enter three in the second field$/, function() { 
     return element(by.model('second')).sendKeys('3'); // you can use return also 
    }); 

    this.When(/^I click Go button$/, function() { 
     return element(by.id('gobutton')).click(); 
    }); 

    this.Then(/^Result should be displayed as Five$/, function() { 
     return element(by.repeater('result in memory')).all(by.tagName('td')).get(2).getText().then(function(text){ 
     expect(text).to.equal('5'); 
     }); 

    }); 

}; 

、それは私がまだアイデアを得るために私にしばらく時間がかかりました多くを学ぶ:)

+0

@ igniteram1によって与えられた解決策を試してみました。最初の2つのステップは前と同じように実行されます。つまり、実際の実行が開始される前であっても、パスを表示します。メッセージ 'function timed out after 5000 ms'のスクリプトエラーが発生します。 – Manya

+0

は、最初の2つのステップでも同様に –

+0

私は自分の答えを更新した、最大化し、あなたのステップでURLを取得する必要はありません、それらは 'onPrepare'または' before'フックの一部でなければなりません –

関連する問題