Как проверить готовую часть Аякса в Жасмине - PullRequest
0 голосов
/ 01 декабря 2018

Мне действительно нравится этот ресурс для AJAX в целом, и он работает с точки зрения тестирования функции success или error, которая находится в параметрах AJAX.

Однако, когда явместо этого выберите $.ajax({ ... success: ... }) и выберите .done() снаружи, я не уверен, как проверить.Пожалуйста, помогите изменить мою простую спецификацию, спасибо!

Код

function itWorked() {}

function sendRequest(callbacks, configuration) {
  $.ajax({}).done(function(response) {
    itWorked()
  });
}

Спецификация

fdescribe("Ajax Tests", function() {
  beforeEach(function() {
    spyOn(window, "itWorked")
    deferred = $.Deferred().done(function() { })
    spyOn($, "ajax").and.callFake(deferred)
    sendRequest()
  })
  it("should work", function() {
    expect($.ajax).toHaveBeenCalled() // pass
    expect(window.itWorked).toHaveBeenCalled(); // fail
  });
});

1 Ответ

0 голосов
/ 03 декабря 2018

Что ж, возможно, пример в вопросе не тот, который вы используете локально, но он должен завершиться ошибкой в ​​строке spyOn($, "ajax").and.callFake(deferred), потому что callFake ожидает функцию, а deferred - нет.Вместо этого deferred должно быть с разрешением Promise и использовать .and.returnValue вместо .and.callFake.

Вот рабочий пример:

  function itWorked() {
    console.log("It worked!!");
  }

  function sendRequest(callbacks, configuration) {
    $.ajax({}).done(function(response) {
      itWorked();
    });
  }

  describe("Ajax Tests", () => {

    beforeEach(function() {
      spyOn(window, "itWorked").and.callThrough();
      deferred = $.Deferred().resolve(); // Call resolve
      spyOn($, "ajax").and.returnValue(deferred); // Use return value
      sendRequest();
    });

    it("should work", function() {
      expect($.ajax).toHaveBeenCalled(); // pass
      expect(window.itWorked).toHaveBeenCalled(); // pass
    });
  });

Обратите внимание, что я добавил console.log("It worked!!"); и использую .and.callThrough(); только для двойной проверки в консоли, что "Это сработало!! " было зарегистрировано.

При вызове $. Deferred (). Resol () вы можете передать насмешливый ответ, который нужно обработать в вашем .done или .then обратный вызов.Что-то вроде .resolve({ success: true }). Посмотрите пример здесь

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...