#javascript #mocha.js #puppeteer
Вопрос:
У меня есть миссия изменить исходный код или существующие тесты Мокко для запуска с Кукловодом. вот тест, который не следует менять:
return assertOnLeft(function (asserter) {
asserter(window.location.href.indexOf("http://XXXX:3000/regression_test_pages/links_page1.html") == 0,
"Address should be links_page.html");
});
Я попытался реализовать функцию assertOnLeft:
const assertOnLeft = async (predicate) => {
const assert = require("assert");
const asserterOk = assert.ok;
await page.evaluate((asserterOk, predicate) => {
return predicate(asserterOk)
}, asserterOk, predicate)
.catch((e) => console.log("error", e));
}
Но я получаю ошибку:
error Error: Evaluation failed: TypeError: predicate is not a function
at __puppeteer_evaluation_script__:2:16
at ExecutionContext._evaluateInternal (/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:218:19)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async ExecutionContext.evaluate (/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:107:16)
at async assertOnLeft (/var/tmp/regression_tests/puppeteer/testWrapper.js:143:5)
Комментарии:
1. Где вы определяете
predicted
? Если это функция узла, вы не можете получить к ней доступ из браузера. Вероятно, вы хотите вернутьwindow.location.href
значение из своего браузера черезevaluate
(это сериализуемая строка), а затем сделать утверждения об этом в контексте узла.
Ответ №1:
страница.оцените сериализацию функции и отправьте ее в браузер puppeeter. Код внутри page.evaluate не является частью вашего кода, и вы не можете вызывать из него функцию вашего кода.
Если вам нужно «хитрое» решение, вы не можете попробовать функцию exposeFunction… но обычно это не очень хороший способ. Если вы опубликуете предсказанный код, я могу предложить вам лучший способ
Попробуйте это:
const assert = require("assert");
const asserterOk = assert.ok;
await page.exposeFunction("predicted", predicted);
await page.evaluate((asserterOk, predicate) => {
return predicted(asserterOk, predicate)
}, asserterOk, predicate)
.catch((e) => console.log("error", e));
Комментарии:
1. добавление страницы ожидания.Функция представления(«предикат», предикат);, возвращает: Ошибка: Ошибка оценки: Ошибка типа: предикат не является функцией