Кукольник — не удалось передать переменную в функцию оценки

#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. добавление страницы ожидания.Функция представления(«предикат», предикат);, возвращает: Ошибка: Ошибка оценки: Ошибка типа: предикат не является функцией