Jest возвращает undefined при тестировании функции, которая получает атрибуты html от элементов - PullRequest
0 голосов
/ 22 января 2020

У меня есть эта функция, которую я хочу проверить в шутке:

getAttributes(el) {
    let dataAttrs = {};
    let attributes = el.attributes;
    const dataAttributes: any = Object.values(attributes);

    for (const dataAttribute of dataAttributes) {
      let keyName = dataAttribute.name;
      let keyValue = dataAttribute.value;
      dataAttrs[keyName] = keyValue;
    }

    return dataAttrs;
}

Вот мой тест шутки:

test('get attributes on element', () => {
  let breadcrumb = new DsBreadcrumb();
  var element = document.createElement('a');
  element.setAttribute('href', 'https://www.google.ca/');
  element.innerHTML = 'lorem ipsum lorem ispum';

  console.log(element.innerText);

  expect(breadcrumb.getAttributes(element)).toBe('Hello');
});

Вот что возвращает шутка:

enter image description here

Я знаю, что мой код работает вне jest, и когда я консоль регистрирую данные. Атрибуты я получаю так: enter image description here

Итак в моем коде, когда я делаю: let keyName = dataAttribute.name;

keyname возвращает неопределенное значение, потому что не может найти значение элемента html. На фото выше вы можете увидеть информацию, которая мне нужна, но по какой-то причине это не объект MockAttr под _name

Любая помощь очень ценится!

1 Ответ

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

Вот решение для модульного теста:

index.ts:

export class DsBreadcrumb {
  public getAttributes(el) {
    const dataAttrs = {};
    const attributes = el.attributes;
    const dataAttributes: any = Object.values(attributes);

    for (const dataAttribute of dataAttributes) {
      const keyName = dataAttribute.name;
      const keyValue = dataAttribute.value;
      dataAttrs[keyName] = keyValue;
    }

    return dataAttrs;
  }
}

index.test.ts:

import { DsBreadcrumb } from './';

describe('59867716', () => {
  describe('#getAttributes', () => {
    it('should pass', () => {
      const breadcrumb = new DsBreadcrumb();
      const mEvent = { attributes: { a: { name: 'a name', value: 'a value' } } };
      const actual = breadcrumb.getAttributes(mEvent);
      expect(actual).toEqual({ 'a name': 'a value' });
    });
  });
});

Результаты модульного теста со 100% покрытием:

 PASS  src/stackoverflow/59867716/index.test.ts (13.135s)
  59867716
    #getAttributes
      ✓ should pass (6ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |      100 |      100 |      100 |      100 |                   |
 index.ts |      100 |      100 |      100 |      100 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        15.124s

Исходный код: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59867716

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