Тестирование вызова Ajax с ответом JSON возвращает неожиданный токен - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть приложение Vue со следующим кодом ...

var vm = new Vue({
el: '#Workbooks',
components: {
    'workbook-list': workbooklist
},
data: {
    workbooks: [],
    message: '',
    loading: true,
    error: false
},
mounted: function () {
    this.getWorkbooks();
},
methods: {
    getWorkbooks: function () {
        var that = this;
        $.ajax({
            type: 'GET',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            url: '/LandingPage/getWorkbooks',
            success: function (response) {
                var results = JSON.parse(response);
                that.workbooks = results.workbooks.workbook;
                that.checkResults();
            },
            error: function (xhr, exception) {
                that.loading = false;
                that.message = 'Sorry, there was a problem fetching your reports. Please try later.';
                that.error = true,
                console.log(xhr.status + ' ' + exception);
            },

        });
    },
     checkResults: function() {
        this.workbooks.length ? this.loading = false : this.message = 'You currently do not have any reports set up.';
    }
},

});

Все работает нормально, но я хочу проверить, что при успешном вызове AJAX он работаетчто это должно.

У меня есть следующий код Жасмин, который я запускаю через Карму ...

it('should check the results on Ajax success', function () {
    spyOn(vm, "checkResults");
    spyOn($, 'ajax').and.callFake(function (e) {
        e.success({}); 
    });

    vm.getWorkbooks();

    expect("checkResults").toHaveBeenCalled();
});

У меня есть две проблемы.Во-первых, я получаю сообщение об ошибке 404 в журналах по URL-адресу AJAX (оно указывает на контроллер ASP.NET MVC, а не на физический файл).Во-вторых, тест завершается неудачно с ' SyntaxError: Неожиданный токен o в JSON в позиции 1 '.Я предполагаю, что это потому, что он просто возвращает объект и пытается проанализировать JSON, который не существует?Пожалуйста, исправьте меня, если я ошибаюсь.

Мой вопрос заключается в том, как мне решить эту проблему и как правильно выполнить модульное тестирование таких вызовов AJAX, поскольку я явно что-то упускаю?По сути, я просто хочу как-то высмеять этот ответ.

Я не знаю, стоит ли также отмечать, что я использую эти инструменты автономно, поэтому я не использую что-либо вроде Webpack для объединения вещей изапустить их.

Большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 25 апреля 2019

Вам нужно ;, а не , в коде ниже

that.loading = false;
that.message = 'Sorry, there was a problem fetching your reports. Please try later.';
that.error = true; // on this line need ';' not ','
console.log(xhr.status + ' ' + exception);
...