Jest-тестирование и изменение значения атрибута с использованием JavaScript - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь написать тест, используя Jest.Уже есть аналогичное тестовое тестирование, если вычисляемый атрибут дает всплывающую подсказку.Теперь я пытаюсь проверить, дает ли атрибут, имеющий встроенную ссылку, всплывающую подсказку.В AnalysisList добавлено hasInlineRef: false.Он должен быть ложным, иначе он перезапишет предыдущий тест.Но при инициализации его для моего теста я хотел бы изменить его на hasInlineRef = true, который должен пройти тест.Я подозреваю, что это мое очень ограниченное знание JavaScript, которое подводит меня здесь.

describe("AnalysisList", () => {
    const analysisList: Array<AnalysisListItem> = [{
        value: "AAAAAA",
        count: 23456,
        capped: false,
        hasInlineRef: false,
        dbValue: "AAAAAA"
    }, {
        value: "AA",
        count: 800,
        capped: true,
        hasInlineRef: false,
        dbValue: "AA"
    }];

Ниже я хотел бы инициализировать AnalysisList с помощью hasInlineRef = true.

    test("should have inline reference attribute tooltip when attribute is hasInlineRef", () => {
        const component = mount(<AnalysisList analysisList={analysisList} onSearch={jest.fn()}  />);
        const tooltip = component.find("Tooltip").first().simulate("click");
        expect(tooltip.props().title).toContain("inlineRefAttributesNoSearch");
    });

1 Ответ

0 голосов
/ 21 января 2019

Ответ на вопрос "как изменить одно свойство внутри массива?" имеет простой ответ:

analysisList[0].hasInlineRef = true;

Здесь мы видим доступ к элементу массива по его индексу ([0]) и доступ к свойству по его имени hasInlineRef.

Необходимость сделать то же самое для всех элементов в массиве заставляет нас либо использовать циклы:

for(item in analysisList) {
    item.hasInlineRef = true;
} 

Или используя методы, доступные для любого массива:

analysisList.forEach(item => {
    item.hasInlineRef = true;
})

Подробнее о работе с массивами в JS: https://www.w3schools.com/js/js_arrays.asp

Благодаря доступу по ссылке оригинал analysisList изменения, а также преобразованию любого его элемента по одному.

Но. Если мы посмотрим на саму точку отсчета, я считаю, что плохая идея - изменять данные теста для каждого теста. Почему?

  1. тесты усложняются для обслуживания, так как вы никогда не знаете, сможете ли вы удалить / добавить / изменить данные, или это нарушит какой-то тест только потому, что мутация данных больше не будет работать (в то же время компонент продолжит работать! Так что провал теста скажет нет ничего)
  2. сами тесты становятся менее надежными: изменение порядка может привести к другим результатам!

Если вам не нравится иметь огромную полезную нагрузку в коде теста, вы можете переместить его в отдельные data_with_some_nuances.json, another_data_payload.json и загрузить их в тест с помощью оператора import.

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