nightmare.jsを使ってみる

はじめに

使ったことないE2Eフレームワークを使ってみる月間、第2弾。 nightmareという名前のため触らずにはいられなかった。

f:id:riririusei99:20180122211912p:plain http://www.nightmarejs.org/www.nightmarejs.org

インストール

$ npm install --save-dev mocha
$ npm install --save-dev nightmare
$ npm install --save-dev power-assert
$ mkdir test
$ touch test/simpe_spec.js

テストを書く

test/simple_spec.js

const Nightmare = require('nightmare')
const assert = require('power-assert')

describe('Load a Page', function() {
  this.timeout('20s')

  let nightmare = null
  beforeEach(() => {
    nightmare = new Nightmare()
  })

  describe('My First Test', () => {
    it('Search riririusei99', done => {
      nightmare.goto('http://teamspirit.hatenablog.com/')
        .type('input[type=text]', 'riririusei99')
        .click('input[type=submit]')
        .evaluate(() => {
          return document.title;
        })
        .end()
        .then((title) => {
          assert.ok(title === 'riririusei99 の検索結果 - TeamSpirit Developer Blog');
          done();
        })
        .catch(done)
    })
  })
})

テストコマンドを追加

package.jsonに下記を追加

  "scripts": {
    "test": "mocha"
  },

テスト実行

$ npm test

> nightmare-test@1.0.0 test /Users/username/Repository/nightmare-test
> mocha



  Load a Page
    My First Test
      ✓ Search riririusei99 (6500ms)


  1 passing (7s)

使ってみた感想

  • アサーションを複数入れようとしたらテストコードがいろいろ複雑になってしまったので断念
  • specファイル一個で動いているので設定をいじるとさらにスッキリするかも
  • Electronが裏で動いているので、Electronを使ったアプリのテストに採用されるのかも
  • ヘッドレスブラウザが裏で動くので簡単なツールの自動化には良いのかも
  • テストコードの書き方に前回と違いが出たので良かった

今回触ったもの

github.com