Отправка e.target в качестве DOM-узла в шутке / энзиме - PullRequest
0 голосов
/ 22 января 2019
//test.js
const map = {};
  document.addEventListener = jest.fn((event, cb) => {
    map[event] = cb;
  });
const wrapper = mount(<AccordianDropdown />);

it('Should not close dropdown on document click inside', () => {
    map.click({
      target: <div role="button"/>,
    });
  });

Это мой файл index.js: -

   // index.js
    componentDidMount() {
        document.addEventListener('click', this.closeOnDocumentClick);
      }

      componentWillUnmount() {
        document.removeEventListener('click', this.closeOnDocumentClick);
      }

    closeOnDocumentClick = (e) => {
        // If event happened in the dropdown, ignore it
        if (!(this.ref && isFunction(this.ref.contains) && this.ref.contains(e.target)) && this.state.open) {
          this.setState({ open: false });
        }
      };

При запуске теста появляется эта ошибка TypeError: Failed to execute 'contains' on 'Node': parameter 1 is not of type 'Node'..Пожалуйста, помогите мне понять, как проверить этот кусок кода.

1 Ответ

0 голосов
/ 08 июня 2019

Ok Нашли решение для этого,

В объекте-оболочке вызовите метод getDOMNode(), чтобы получить элемент (ы) DOM.Если вы передадите этот элемент в качестве значения event.target.Вы не получите исключение.

Если нет, вы можете создать элемент, используя JSDOM

const dom = new JSDOM();
const newDiv = dom.window.document.createElement("div");

, а затем


    test('...', () => {
        const mockedEvent = { target: wrapper.getDOMNode()[0] };
        wrapper
            .find('ClickAwayListener')
            .props()
            .onClickAway(mockedEvent);
    });

или Если вы просто хотите избежатьисключение, TypeError: Failed to execute 'contains' on 'Node': parameter 1 is not of type 'Node'. передать нулевое значение в качестве цели для смоделированного события или обработчика обратного вызова события.

    test('...', () => {
        const mockedEvent = { target: null };
        wrapper
            .find('ClickAwayListener')
            .props()
            .onClickAway(mockedEvent);
    });

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

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