Как проверить JQuery сценарий в сумерках Laravel - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь протестировать в сумерках Laravel нажатую ссылку, которая вызывает AJAX JS-скрипт, который пишет в базу данных и изменяет текст ссылки.Ссылка представляет собой ссылку «Мне нравится» в социальной сети, и при нажатии текст меняется на Вас следующим образом.

Тестовый код

$user = factory(User::class)->create();
        factory(Post::class)->create();

        $this->browse(function ($browser) use ($user) {
            $browser->loginAs($user)
                ->visit('/dashboard')
                ->clickLink('Like', 'a');

            $test = $browser->script('return $(".like").text();');
            $broswer->assertSee('You like this');```


JS code executed

$('.like').on('click', function(event) {
        event.preventDefault();
        // Get the parent article node
        var parent = getClosest(event.target, 'article');
        var postId = parseInt(parent.dataset['postid']);
        var parentLike = event.target.parentNode;

        // console.log(event.target.parentNode.classList);
        if (typeof postId == 'number' && postId > 0) {
            $.ajax({
                    method: 'POST',
                    url: route('like'),
                    dataType: "json",
                    data: {
                        postId: postId,
                        _token: $('meta[name="csrf-token"]').attr('content')
                    }
                })
                .done(function(data) {
                    var likeText = updateLikeText(data.message, data.numLikes, parentLike);
                    event.target.text = likeText;
                });
        }
    });

The link text should change to You Like this but in the test code, the text doesn't change. Accessing the site through the browser and clicking on the link manually works file.  How do I tell dusk to execute the JS script

1 Ответ

0 голосов
/ 27 мая 2019

Ваш тест не учитывает время выполнения AJAX-запроса.

jQuery имеет свойство, которое указывает, активен ли запрос AJAX.

Вы можете использовать его, чтобы дождаться завершения запроса, прежде чем проверять текст ссылки:

$browser->loginAs($user)
    ->visit('/dashboard')
    ->clickLink('Like', 'a');

$browser->waitUntil('!$.active');

$browser->assertSeeIn('.like', 'You like this');
...