Обсудить проблему с раньше в Мокко
У меня проблема с настройкой и очисткой тестов в before
а также after
методы в Mocha
тестирование.
Я использую Chromeless для тестирования e2e. Для упрощения реализации я переместил мой Chrome Launcher в отдельный файл (скажем, my-chrome-launcher.js
) экспортируя async
функция:
var chromeLauncher = require('chrome-launcher');
module.exports = {
launchChrome: async function(headless) {
try {
var flags = ['--disable-gpu'];
if (headless) {
flags = ['--headless', '--disable-gpu'];
}
let chrome = await chromeLauncher.launch({
port: 9222,
chromeFlags: flags
});
console.log(`Chrome debugging running on port ${chrome.port} with pid ${chrome.pid}`);
return chrome;
} catch (ex) {
console.error(ex.messsage);
}
}
}
simple.js
const {
Chromeless
} = require('Chromeless')
var http = require('http');
var fs = require('fs');
var assert = require('assert');
const myChromeLauncher = require('./my-chrome-launcher.js');
describe('app', function() {
describe('Top Results', function() {
it('should return top results', async() => {
chrome = await myChromeLauncher.launchChrome(true);
chromeless = new Chromeless();
const links = await chromeless
.goto('https://www.google.com')
.type('chromeless', 'input[name="q"]')
.press(13)
.wait('#resultStats')
.evaluate(() => {
// this will be executed in headless chrome
const links = [].map.call(
document.querySelectorAll('.g h3 a'),
a => ({ title: a.innerText, href: a.href })
)
return links;
});
// Assert
assert.equal(links.length, 11);
await chromeless.end();
chrome.kill().catch(e => console.error(e));
});
});
});
Вышеупомянутый тест работает хорошо, но когда я хочу использовать before
, beforeEach
, after
или же afterEach
методы, чтобы поделиться кодом установки, как показано ниже, я получаю сообщение об ошибке:
describe('app', function() {
describe('Top Results', function() {
var chrome;
var chromeless;
before(function() {
chrome = await myChromeLauncher.launchChrome(true);
chromeless = new Chromeless();
});
....
after(function() {
await chromeless.end();
chrome.kill().catch(e => console.error(e));
});
});
});
Ошибка:
chrome = await myChromeLauncher.launchChrome(true);
^^^^^^^^^^^^^^^^
SyntaxError: Unexpected identifier
1 ответ
Ваш before
обработчик также должен быть async
т.е.
before(async function() {
chrome = await myChromeLauncher.launchChrome(true);
chromeless = new Chromeless();
});
Из документов
Оператор ожидания используется для ожидания обещания. Он может использоваться только внутри асинхронной функции.