私はしばらくの間この問題と戦ってきましたが、解決策が見つからないようです。サーバーで 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 オプションを使用できません。