【发布时间】:2021-07-10 23:19:43
【问题描述】:
我要测试的代码的目的是通过使用树来解析数学表达式。 因此,我想到了渐进式的测试,我慢慢地建立一棵树,在每次操作后进行测试,如下所示:
TreeBuilder.addNode(small, "A=B*C");
it("should return 0 due to using default values", () => {
expect(small.getValue("A")).to.equal(0);
});
TreeBuilder.changeValue(small, "B", 2);
TreeBuilder.changeValue(small, "C", 3);
it("should update parent value after changing leaves", () => {
expect(small.getValue("A")).to.equal(6);
});
等等 - 细节并不重要,但你明白了。现在,显然,这不起作用,因为“it”之外的所有语句都会立即执行,所以我不能进行这样的“渐进式测试”。
当然,我可以为每个测试使用不同的数据对象,但我不喜欢这种解决方案,因为那样会很麻烦。
所以我的问题更多是最佳实践,而不是特定代码:如何最好地测试通过多个函数调用逐步发展的行为?
【问题讨论】:
-
这有点自以为是,但让测试不相互依赖被认为是一种好习惯。这意味着每个测试都有不同的数据对象,因此它们可以独立运行。另一种方法是创建一个大的
it块并执行类似“设置 -> 预期 -> 更改 -> 预期下一个 -> 更改 -> 预期下一个”之类的操作。尽管这被认为是一种不好的做法,因为您的测试基本上是多个测试合二为一。实际上,这确实实现了您尝试做的相同事情 - 按顺序运行预期。 -
刚刚注意到,但在您的具体示例中,您也可以将您的
TreeBuilder.addNode(small, "A=B*C");包装在beforeEach()中,并将取决于您在describe中的更改的所有内容使用您的另一个beforeEach()描述块。
标签: javascript node.js testing mocha.js chai