【发布时间】:2015-06-13 01:04:32
【问题描述】:
一个常见的建议是,Mocha 测试用例不应共享状态。鉴于 Mochas 执行测试用例的强顺序性,我真的不明白这个建议。还有更多 - 我认为这很可疑。
如果测试用例,即使是异步测试用例,严格地一个接一个地执行,就不会有时间竞赛问题或其他不可预测的执行顺序的风险。
让我们来看看这个 Mocha 结构:
describe
describe
it1
it2 // async
it3
describe
it4
it5
describe
describe
it6 // async
it7 // async
it8
describe
it9
it10
测试用例将始终以明确的顺序执行,it1、it2、... it10,独立于它们是同步还是异步,甚至独立于描述的层次结构。以下结构将产生完全相同的输出:
describe
it1
it2 // async
it3
it4
it5
it6 // async
it7 // async
it8
it9
it10
在单个 describe() 中的测试用例之间共享数据可以使测试用例之间的通信变得更加容易和舒适,以便:
- 重用测试代码并避免在每个(或 其中一些)测试用例。钩子在这里很方便,但有时是 比他们提供的更多控制权
- 减少测试执行时间 - 可以节省大量时间,避免过多的钩子,这些钩子除了满足关于无状态的建议之外什么都不做。
另一个支持在测试用例之间使用共享数据的事实是 Mocha 代码的这种简单而漂亮的结构。不同级别的 describe() 允许对该最终共享数据进行简单而清晰的范围管理。
当“全局变量”被“滥用”时,我看到的唯一不利方面是使代码更难理解、遵循和维护。无论如何,没有什么是有纪律的编码无法避免的。
这里有什么我不知道的吗?
【问题讨论】: