как бороться с тестированием, использующим uuid внутри компонента - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь протестировать свой компонент, который имеет функцию для добавления элемента в массив, и каждый из этих элементов имеет свойство UUID, но я получаю эту ошибку, когда пытаюсь запустить для этого модульный тест.

  TypeError: Cannot read property 'v1' of undefined
     const basicDataItem = {
    > 380 |         id: this.$uuid.v1()

Как я могу проверить код, который использует UUID, как в этом случае?

edit: это функция, которую я хочу проверить

  addDataItem(key) {
    const basicDataItem = {
      id: this.$uuid.v1(),
      units: '',
      price: '',
      label: '',
    };

    this.editableData[key].push(basicDataItem);
  }

1 Ответ

0 голосов
/ 06 ноября 2019

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

index.js:

export class SomeClass {
  editableData = {
    jest: []
  };
  $uuid = {
    v1() {
      return 'real uuid';
    }
  };
  addDataItem(key) {
    const basicDataItem = {
      id: this.$uuid.v1(),
      units: '',
      price: '',
      label: ''
    };

    this.editableData[key].push(basicDataItem);
  }
}

index.spec.js:

import { SomeClass } from './';

describe('SomeClass', () => {
  test('should add data item', () => {
    const someClassInstance = new SomeClass();
    const uuidv1Spy = jest.spyOn(someClassInstance.$uuid, 'v1').mockReturnValueOnce('fake uuid');
    someClassInstance.addDataItem('jest');
    expect(uuidv1Spy).toBeCalledTimes(1);
    expect(someClassInstance.editableData).toEqual({ jest: [{ id: 'fake uuid', units: '', price: '', label: '' }] });
  });
});

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

 PASS  src/stackoverflow/58710736/index.spec.js
  SomeClass
    ✓ should add data item (14ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |    88.89 |      100 |    66.67 |     87.5 |                   |
 index.js |    88.89 |      100 |    66.67 |     87.5 |                 7 |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.909s, estimated 6s

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

...