玩笑测试并使用JavaScript更改属性值

时间:2019-01-21 13:48:33

标签: javascript jestjs

我正在尝试使用Jest编写测试。如果计算出的属性给出了这样的工具提示,则已经存在类似的测试测试。现在,我正在尝试测试具有内联引用的属性是否给出了这样的工具提示。在AnalysisList中添加了“ hasInlineRef:false”。它必须为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"
    }];

下面,我想使用hasInlineRef = true初始化AnalysisList。

    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 :(得分:1)

一个正在回答的问题“如何更改数组内的单个属性?”答案很简单:

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

感谢accessing by reference原始analysisList的更改,以及我们对它的任何一项进行一次转换。

但是。如果我们从最开始的角度来看,我认为对每个测试用例的测试数据进行变异是一个坏主意。为什么?

  1. 测试变得更加难以维护,因为您永远不知道是否可以删除/添加/更改数据,否则由于数据突变将不再起作用(同时组件将继续工作!),它会破坏某些测试!因此测试失败将说明什么都没有)
  2. 测试本身变得不太可靠:更改顺序将导致不同的结果!

如果您不希望在测试代码中拥有巨大的数据负载,则可以将其移动到单独的data_with_some_nuances.jsonanother_data_payload.json中,并借助import语句将其加载到测试中。 / p>