我正在尝试使用 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"
}];
下面我想用 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");
});
最佳答案
回答问题“如何更改数组内的单个属性?”有简单的答案:
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
发生变化,我们也将其任何项目一一转换。
但是。如果我们看看最开始的点,我认为改变每个测试用例的测试数据是个坏主意。为什么?
- 测试变得更难维护,因为你永远不知道是否可以删除/添加/更改数据,否则它会破坏一些测试,因为数据突变将不再起作用(同时组件将继续工作!所以测试失败会说什么也没有)
- 测试本身变得不太可靠:改变顺序会导致不同的结果!
如果您不喜欢在测试代码中包含大量数据负载,您可以将其移动到单独的 data_with_some_nuances.json
、another_data_payload.json
中,然后使用以下命令将它们加载到测试中: import
语句的帮助。
关于javascript - 使用 JavaScript 开 Jest 测试和更改属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54291380/