【发布时间】:2018-01-09 22:29:43
【问题描述】:
有时,我编写的函数在某些情况下应该什么都不做。他们不做任何事情不仅是可以接受的,而且实际上是必需的行为。是否有测试函数以确保其没有副作用的模式?
例如,我目前正在测试一个如下所示的函数:
function onRowOfIconsClicked(iconName) {
if (iconName === 'new') {
doSomeAwesomeStuffImAlreadyTesting();
}
// We haven't implemented the other icons yet, so for now,
// do nothing and don't throw an error if a different icon
// is clicked
}
我将如何编写一个测试用例来断言当onRowOfIconsClicked 被iconName 而不是"new" 调用时,该函数什么都不做?
【问题讨论】:
-
我可以编写一个测试来确保该函数通常会导致的特定副作用不会发生。如果这是这样的测试的唯一模式,那就是我要做的。不过,我想知道是否有我不知道的更优雅或更常用的模式。
-
这些函数有多复杂?您能否为
onRowOfIconsClicked()和doSomeAwesomeStuffImAlreadyTesting()创建一个间谍,如果iconName != 'new'那么第一个间谍应该被调用一次,而第二个则根本不调用。假设上面的代码是它的实际结构。 -
我猜你可以在
else块中设置函数arguments.callee.did_nothing = 1,如果它什么都不做的话...... -
问问自己为什么需要测试那个特殊情况。是否有更好的方法来构建不需要无操作的代码?如果你以后想做点什么,你想让自己以后更难吗?
标签: javascript testing mocha.js