0

私はしばらくの間この問題と戦ってきましたが、解決策が見つからないようです。サーバーで NightmareJS + mocha を使用してテストを実行すると、失敗します。私は実行してみました:

DEBUG=nightmare:* env ENV=staging mocha --harmony tests.js

ただし、ログ/アクションエラーなどは表示されません。テストが失敗しているだけです (タイムアウト)。

Error: timeout of 30000ms exceeded. Ensure the done() callback is being called in this test.

NightmareJS を使用せずに Mocha テストのみを実行でき、問題なく動作しています。また、ローカル マシンで nighmareJS テストを実行すると、問題なく動作します。

NightmareJS がサーバーにインストールされ、package.json コンテンツ:

"dependencies": {
    "chai": "^3.5.0",
    "mocha": "^2.4.5",
    "mocha-generators": "^1.2.0",
    "mocha-bamboo-reporter": "*",
    "nightmare": "^2.2.0",
    "nodeunit" : "~0.8"
  }

テストのコードは次のとおりです。

require('mocha-generators').install();
var Nightmare = require('nightmare');
var expect = require('chai').expect;

var url = null;
var options = {
    show: false,
    'webPreferences': {
        partition: 'something_xyz'
    }
};
if (process.env.ENV === 'staging') {
    console.log("Running tests against staging environment");
    url = 'https://staging.something.com/app/';

} else {
    console.log("Running tests against local environment");
    url = 'http://localhost:8080/app/';
}

describe('Nightmare JS tests', function() {
    this.timeout(30000);

    describe('base functionality', function() {
        var nightmare;
        before(function*() {
            nightmare = Nightmare(options);
        });

        after(function*() {
            var endTest = yield nightmare
                    .end()
        });

        it('Should be able to login', function*() {

            var result = yield nightmare
                    .goto(url)
                    .wait('img.google-login-btn')
                    .click('img.google-login-btn')
                    .wait('div.main-content.row h4')
                    .wait(1000)
                    .evaluate(function () {
                        return document.querySelector('div.main-content.row h4').innerText;

                    })

            expect(result).to.equal("Logged in!");

        });

        // here are the rest of the tests

    });
});

どうすればこれをデバッグできますか? サーバー上で実行しているため、show: true オプションを使用できません。

4

2 に答える 2

1

ヘッドレス環境で /nightmare に関する一般的な問題が発生している可能性があります。詳細については、 https://github.com/segmentio/nightmare/issues/224を参照してください。最も簡単な解決策は、Xvfb をインストールして実行することですxvfb-run mocha ...

また、electron に DEBUG フラグを渡しDEBUG=nightmare*,electron*、Nightmare と Electron が正常に起動しないこのような状況で役立つ追加のデバッグ出力を取得することもできます。

于 2016-04-27T17:28:15.953 に答える
0

これは古い問題ですが、役立つかもしれません。ヘッドレスenvでelectronを実行するには、いくつかのものが必要になる場合があります。

この Dockerfile を見てください: https://github.com/aheuermann/docker-electron/blob/master/7/Dockerfile

必要な最小限のライブラリです。そして、スクリプトを開始するには:

Xvfb -ac -screen scrn 1280x2000x24 :9.0 &
export DISPLAY=:9.0
DEBUG=* node src/index.js
于 2017-01-11T10:55:32.823 に答える