Покрытие шутки за $. ajax - PullRequest
       36

Покрытие шутки за $. ajax

0 голосов
/ 28 января 2020

Я хочу протестировать метод $.ajax в своем методе реагирования, используя шут и энзим для покрытия единиц.

$.ajax({
      url: `url`,
      type: "GET"
    }).done(data => {
        //dosomething
      }).fail(err => {
       //do something else
      });

Как я могу высмеять $.ajax, чтобы покрыть тест на предмет успеха и ошибки?

Ответы [ 3 ]

1 голос
/ 28 января 2020

Макет $.ajax с использованием функции шутки.

$.ajax = jest.fn().mockImplementation(options => {
  let instance = {
    done: fn => {
      if (options.success) fn("test passed");
      return instance;
    },
    fail: fn => {
      if (!options.success) fn("test failed");
      return instance;
    }
  };
  return instance;
});

Edit flamboyant-cookies-ecd56

Примечание: Я рекомендую проверить ваш обратный вызов функционирует отдельно от насмешливых сторонних модулей / функций.

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

Следующий код работает для насмешливого ответа ajax (готово и неудачно) -jest testcases @abbas ali: P

let  response={"rows":[{"dlvDate":"03/13/2020","sts":"SC","}],"errorMessage":null,"count":null,"data":null,"result":true};

let ajax_response_sucess=(response)=> {
  var deferred = $.Deferred().resolve(response);
  return deferred.promise();
}

let ajax_response_fail=(response)=> {
  var deferred = $.Deferred().reject(response);
  return deferred.promise();
}

  it("test for callModalService function", () => {
$.ajax=jest.fn=()=>{return ajax_response_sucess(response)}; 
wrapper.instance().callModalService()//call the function,which makes Api call

$.ajax=()=>{return ajax_response_fail(response)}; 
//call the function which makes Api call
 wrapper.instance().callModalService()
})
0 голосов
/ 28 января 2020

Это будет зависеть от фактической реализации, но в случае, если вы определили глобально $, например, войдите в него из внешнего файла, вы можете смоделировать его в своем тесте следующим образом:

const mockAjax = {
  done: jest.fn().mockReturnThis(),
  fail: jest.fn().mockReturnThis(),
};

global.$ = {
  ajax: jest.fn(() => mockAjax)
};

// and then require your implementation
require('./path/to/ajax/call.js');


// and then you can use jest's .mock property
// https://jestjs.io/docs/en/mock-functions#mock-property
// to get your callback
const [ firstCall ] = mockAjax.done.calls;
const [ yourCallback ] = firstCall;

// and call it with mockData
yourCallback(mockData);

рабочий пример

...