テストへのアサーションの追加
概要
Nightwatch は、要素についてアサーションを実行する同じメソッドを含む 2 つの名前空間として、拡張可能な組み込みの assert
/verify
ライブラリを提供します。
.assert
.assert
名前空間では、アサーションが失敗するとテストが終了し、テスト内の他のすべてのアサーションがスキップされます。
次のコードスニペットの例では、assert
名前空間を使用して、クラス non_existing
の要素がページ上に表示されているかどうかをアサートします。アサーションが失敗すると、テストは終了します。
browser.element.find('selector').assert.visible('.non_existing');
.verify
.verify
名前空間では、アサーションが失敗しても、テストは失敗をログに記録し、テスト内の他のアサーションを続行します。
次のコードスニペットの例では、verify
名前空間を使用して、クラス non_existing
の要素がページ上に表示されているかどうかを確認します。アサーションが失敗すると、失敗がログに記録され、テストは続行されます。
browser.verify.visible('.non_existing');
基本的なアサーション
Node.js assert モジュール のメソッドも、必要に応じて使用できる .assert
/.verify
名前空間で使用できます。
否定 (".not") アサーション
Nightwatch バージョン1.3以降、カスタム定義のアサーションを含むすべてのアサーションには、逆の条件をアサートするために使用できる ".not"
の対応物があります。
elementNotPresent
、cssClassNotPresent
、hidden
などのアサーションは、非推奨です。次のコードスニペットの例は、".not"
アサーションを示しています。
describe('Demo .not assertion', function() {
it('demo test', function(browser) {
browser.init();
browser
.element.find('.not_present')
.assert.not.elementPresent();
browser
.assert.not.urlContains('http://');
// ...
})
})
自動リトライ
デフォルトでは、Nightwatch は最大 5000
ミリ秒間、失敗したアサーションを自動的にリトライします。これは、nightwatch.json
ファイルの globals
オブジェクトで retryAssertionTimeout
(ミリ秒単位) プロパティを設定することで構成できます。詳細については、テストグローバルの使用 を参照してください。
指定されたタイムアウトに達すると、テストランナーはリトライを停止し、アサーションを失敗としてマークします。
次のコードスニペットの例は、設定ファイルで定義された retryAssertionTimeout
プロパティを示しています。
{
src_folders: ['tests'],
test_settings: {
default: {
launch_url: 'https://nightwatch.dokyumento.jp',
globals: {
myGlobalVar: 'some value',
retryAssertionTimeout: 5000
}
}
}
}
Expect アサーション
assert
名前空間に加えて、Nightwatch API は、アサーションの柔軟性と可読性を大幅に向上させる BDD スタイルの expect
アサーションライブラリをすぐに使用できます。
expect
アサーションは、Chai フレームワーク の Expect
api のサブセットを使用し、現時点では要素、Cookie、ページタイトル、URL で使用できます。
例
さまざまな expect.element([...])
アサーションを使用する基本的な例を次に示します。
module.exports = {
'Demo test Ecosia.org': function (browser) {
browser.url('https://www.ecosia.org/');
// expect element header to be present in 1000ms
expect(browser.element.find('header')).to.be.present.before(1000);
browser.end();
}
};
特定の要素数の期待
この例では、テストは、expect.elements([...]).count
アサーションを使用して、指定された数の要素がページ上に存在することを期待しています。
module.exports = {
'demo test ecosia.org'(browser) {
browser
.url('https://www.ecosia.org/')
.expect(browser.element.findAll('section').count()).to.equal(5);
},
after(browser) {
browser.end();
}
};
expect
インターフェースは、アサーションを定義するためのより柔軟で流動的な言語を提供し、既存の assert
インターフェースよりも大幅に改善されています。唯一の欠点は、アサーションをチェーンできなくなったことです。
使用可能な expect
アサーションの完全なリストについては、API ドキュメント を参照してください。