Получите ответ от Codeception $ I-> executeAsyncJS - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь выполнить запрос AJAX в браузере в Codeception. Есть функция

$I->executeAsyncJS();

Ручная https://codeception.com/docs/modules/WebDriver#executeAsyncJS

Я пытаюсь понять руководство. Там написано:

Выполняется асинхронно JavaScript. Обратный вызов должен быть выполнен JavaScript для выхода из скрипта. Обратный вызов передается как последний элемент в массиве arguments. Дополнительные аргументы могут быть переданы в виде массива во втором параметре.

Я просто не понимаю, что это говорит. Вот что у меня есть:

JS на странице:

const Done = {};
Done.result = function(){
    return "Happy";
}

Codeception Selenium WebDriver Chrome Тест:

<?php

class SEQuestionCest
{

    public function itShouldReturnJoy(\AcceptanceTester $I){
        $I->amOnPage("/page.php");

        $happy = $I->executeJS("return Done.result();");
        $I->assertEquals($happy, "Happy"); //This works
        $happy = $I->executeAsyncJS("setTimeout(function() { return Done.result(); }, 2000);"); //I'm doing something wrong

        $I->assertEquals($happy, "Happy");
    }
}

Результат: enter image description here

Я ожидал, что он вернется через 2 секунды, но вместо этого он просто отключится через 20 секунд. Я думал, что функция тайм-аута будет имитировать вызов AJAX. Я делаю что-то очень неправильно, очевидно.

...