私はCodeceptJsで遊び始めました。私は現在、NightmareJsで使用しています。カスタムヘルパーでのアサーションの処理
私がテストしている特定の領域は、JSONP経由でインタフェースからデータを取り出し、<div>
にラップされたイメージのリストを作成するギャラリーです。
私は実装していますテストの部分は、以下のようなものです:要素は任意の数とすることができるので、今すぐ
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')
})
それとも、より良いようなものを要素を選択したかったです
"helpers": {
"Nightmare": {
"url": "http://localhost:3000"
},
"DOMElements": {
"require": "./__tests__/helpers/domelements_helper.js"
}
}
:私は次の持っている私の構成では
http://codecept.io/helpers/
でガイドに記載されの
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})`)
})
現在のヘルパーは、私はいくつかの特定のアクションを実行することはできません可能なので、私はカスタムハンドラを実装し始め
と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
このdoesnの'はっきりと働いている。これはちょっと混乱しています。
最初に、デフォルトのNode.jsアサーションライブラリを使用しています。必要がある場合は、プロトラクターやChai-as-promisedのようなより堅牢なものに移行しても構いませんが、 。
第二に、ドキュメントは明らかに次のように述べている:
任意のヘルパーメソッドが本当に意味がないチェーン
を約束するために追加されるために、値を返す必要があります...私は約束を返すべきですか、私はthen()
の声明の中のすべてを扱うべきですか?基本的な価値を返すことは実際にはあまり効果がありません。それでも、失敗したアサーションをどうすれば処理できますか?
コードベースでナイトメアのクライアントスクリプトも見たことがありますが、私がちょっとだけコードベースを掘り下げ始めたのでCodeceptJsをカスタマイズして拡張します。
任意のポインタは本当に誰もがここまで持っているように思わないので、私はこの事は、コードベースを経てどのように動作するかを発見し、もう少し理解しているように見えるような答えを追加するつもりだ