Жасмин: не может проверить функцию, переданную в качестве параметра - PullRequest
0 голосов
/ 20 марта 2020

Это мой js файл:

My.File = {
    someMethod: function() {
        var finalURL = "https://some.url.com"
        var somePostCall = $.post(My.URL, {
            sessionToken: My.Session.sessionToken
        });
        somePostCall.done(function(response) {
            //do something with the response   ===> I want to test this function, and mock the 'response'

        });
    }
}

Я пытаюсь написать тест, охватывающий функцию, передаваемую в вызове done. Я не хочу совершать фактический вызов ajax, я хочу пометить ответ от http-вызова и все еще хочу получить обещание somePostCall для вызова. И когда метод «done», «response» должен быть смоделирован с чем-то, придуманным мной.

Я пытался получить ответ от вызова $ .post. Например:

spyOn($, 'post').and.callThrough();
My.File.someMethod();
var promise = $.post.calls.mostRecent().args[0];

Проблема в том, что .args [0] не возвращает значение из $ .post, это просто передаваемые параметры. Если я могу подсмотреть ответ от $ .post, то я могу проследить его и перехватить функцию, переданную методу done. Таким образом, я могу, по крайней мере, назвать его вручную и передать поддельный «ответ».

Есть идеи?

1 Ответ

0 голосов
/ 20 марта 2020

.args[0] Не возвращает разрешенное обещание. Он просто проверяет параметры, переданные функции. И это также asyn c. Таким образом, ваши ожидания должны ждать, пока обещание не будет выполнено.

My.File = {
    someMethod: function() {
        var finalURL = "https://some.url.com"
        return $.post(finalURL, { // return the promise
            sessionToken: My.Session.sessionToken
        });
    }
}

spe c file.

it('some spec', async () => { // Async
  spyOn($, 'post').and.callThrough();
  const response = await My.File.someMethod();

  // check if post method is called with correct arguments e.g My.URL is what you expect
  const url = $.post.calls.mostRecent().args[0]
  expect(url).to.be("https://some.url.com");

  // test the response 
});
...