0

私は CodeceptJs をいじり始めましたが、非常に簡単に動作するようになりました。現在NightmareJsで使用していますが、すべて問題ないようです。

私がテストしている特定の領域は、JSONP を介してインターフェイスからデータをフェッチし、<div>s でラップされた画像のリストを作成するギャラリーです。

私が実装しているテストの一部は、次のようなものです。

Feature('gallery')
Scenario('clicking on an element adds "selected" class', (I) => {
  I.amOnPage('/')
  I.seeElement('#gallery .col-md-3')
  I.click('#gallery .col-md-3')
  I.seeElement('#gallery .selected')
})

要素は任意の数になる可能性があるため、現在は最初の要素を静かに使用していますが、もう少しエントロピーを与えるために、次のような要素をランダムに選択したかったのです。

Scenario('clicking on an element adds "selected" class', (I) => {
  I.amOnPage('/')
  I.seeMoreThanElements('#gallery .col-md-3', 1)
  I.clickOnRandomElement('#gallery .col-md-3')
  I.seeElement('#gallery .selected')
})

または、次のように、要素のリストを取得して、どの要素をクリックするかを決定できればさらに良いでしょう。

Scenario('clicking on an element adds "selected" class', (I) => {
  I.amOnPage('/')
  I.seeMoreThanElements('#gallery .col-md-3', 1)
  const elements = I.grabRandomElement('#gallery .col-md-3')
  const random = getRandomInt(1, elements.length)
  I.click(`#gallery .col-md-3:nth-child(${random})`)
  I.seeElement(`#gallery .col-md-3.selected:nth-child(${random})`)
})

現在利用可能なヘルパーでは特定のアクションを実行できないため、http://codecept.io/helpers/のガイドで説明されているようにカスタム ハンドラーの実装を開始しました。

私の構成では、次のものがあります。

"helpers": {
  "Nightmare": {
    "url": "http://localhost:3000"
  },
  "DOMElements": {
    "require": "./__tests__/helpers/domelements_helper.js"
  }
}

現在、domelements_helper.js次のようになっています。

'use strict'
let assert = require('assert')

class DOMElements extends Helper {
  seeMoreThanElements (locator, count) {
    this.helpers['Nightmare']._locate(locator).then(function (els) {
      return assert(els.length >= count, `Found more than ${count} elements`)
    })
  }
}

module.exports = DOMElements

これは明らかに機能しません。これは私が少し混乱しているところです。

まず第一に、私はデフォルトの Node.js アサーション ライブラリを使用しています。必要があれば、Protractor や Chai-as-promised などのより堅牢なものに喜んで移行しますが、スリムであればあるほど良いです。

第二に、ドキュメントには次のことが明確に記載されています。

promise チェーンに追加するには、ヘルパー メソッドが値を返す必要があります。

本当に意味をなさないのはどちらですか...約束を返す必要がありますか、then()それともステートメント内ですべてを処理する必要がありますか? 基本的な値を返すことは、実際にはあまり効果がありません。それでも、失敗したアサーションをどのように処理しますか?

コードベースでナイトメアクライアントスクリプトも見ましたが、カスタマイズと拡張の方法をもう少しよく理解するためにコードベースを掘り下げ始めたばかりなので、それが私の場合に役立つかどうかはわかりませんCodeceptJs.

どんなポインタでも本当に感謝しています

4

1 に答える 1