Как издеваться над вызовом $.ajax в JEST

Я новичок в среде React & JEST, я попытался выполнить ajax-вызов в реакции, как показано ниже, если я получу данные об успехе, он будет перенаправлен на домашнюю страницу, иначе отобразится сообщение об ошибке.

let params ={
    userName : this.state.userName,
    password : this.state.passWord
};

$.ajax({
    url: '/reactApp/login',
    dataType: 'json',
    contentType: 'application/json;',
    type: 'POST',
    data: JSON.stringify(params),
    success: function (successData) {
        if (typeof(Storage) !== "undefined") {
            localStorage.setItem('userProfile', JSON.stringify(successData));
            browserHistory.push('/reactApp/Home');
        } else {
            alert("The browser version is not supported.Please use Internet explorer 11, Chrome or firefox.")
        }
    }.bind(this),
    error: function(errorData){
        this.setState({
            errorMessage: errorData.message,
            errorDisplay: true,             
        });
    }.bind(this);

Код реакции работает, я попытался написать модульный тест в JEST для приведенного выше кода для вызова ajax, как показано ниже,

  jest.unmock('jquery');
  jest.unmock('./AjaxLogin');

  var $ = require('jquery');
  const Login = TestUtils.renderIntoDocument(<AjaxLogin />);
  expect(Login).toBeDefined();
  var handleClick = jest.genMockFunction();

  var button = TestUtils.findRenderedDOMComponentWithTag(Login, 'button');

  TestUtils.Simulate.click(button);

  Login.handleClick(); 
  expect($.ajax).toBeCalledWith({
     url: '/reactApp/login',
     dataType: 'json',
     contentType: 'application/json;',           
     type: 'POST',
     data: JSON.stringify({userName : 'testing', password : 'password'}),
     success: jasmine.any(Function),
     error: jasmine.any(Function)
  });

Когда я запускаю этот тестовый пример, я получил сообщение об ошибке ниже, я не знаю, что не так в приведенном выше коде.

Ожидаемая функция, которая будет вызываться с объектом

может ли кто-нибудь помочь мне определить проблему в скрипте модульного теста.


person Nithila    schedule 01.07.2016    source источник


Ответы (1)


Метод unmock удаляет макет, поэтому вместо этого вам нужно использовать метод Jest mock. репозиторий Jest содержит несколько примеров, описывающих базовое использование, включая то, как имитировать jquery. как использовать с реакцией, так что стоит посмотреть.

person Alex    schedule 27.03.2018