【发布时间】:2020-01-08 11:57:17
【问题描述】:
我正在尝试生成一系列动作,其中应该生成的动作取决于之前的动作。
假设我的状态是一组存储为数组的数字:
[1, 2]
还有以下动作:
{ type: "add", value: number }
{ type: "remove", value: number }
我想在检查状态属性之前生成一系列动作来调度。如果生成了删除操作,我想确保它的值处于状态。
有效例子:
initial state: [1, 2]
[{ type: "remove", value: 1 }, { type: "remove", value: 2 }]
[{ type: "add", value: 3 }, { type: "remove", value: 3 }]
无效示例:
initial state: [1, 2]
[{ type: "remove", value: 3 }]
[{ type: "remove", value: 2 }, { type: "remove", value: 2 }]
这是否可以使用基于属性的测试库实现,如果可以,我将如何实现?
我正在使用https://github.com/dubzzz/fast-check,但如果使用另一个库更容易,我愿意接受其他人的示例。
【问题讨论】:
-
您的意思是不想运行删除操作,除非您可以仅基于之前的操作验证该值已处于状态?
-
这是其中的一部分。我想我可以通过基于初始状态生成动作来实现这一点(删除动作必须包含当前处于状态的值),然后在实际运行之前检查动作是否有意义(如果值不是状态,不要分派删除)。但是,这永远不会在我的问题中生成第二个有效示例,因为 3 不在初始状态。
标签: javascript property-based-testing