概要

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" の対応物があります。

elementNotPresentcssClassNotPresenthidden などのアサーションは、非推奨です。

次のコードスニペットの例は、".not" アサーションを示しています。

tests/sampleTest.js
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 プロパティを示しています。

nightwatch.conf.js
{
  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([...]) アサーションを使用する基本的な例を次に示します。

tests/sampleTest.js
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 アサーションを使用して、指定された数の要素がページ上に存在することを期待しています。

tests/sampleTest.js
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 ドキュメント を参照してください。