【发布时间】:2021-06-16 03:29:00
【问题描述】:
我有一个更新时间的问候组件。根据一天中的时间打印问候语
- 早安,简
- 下午好,简
- 晚上好,简
我有一个名为getTimeOfDay 的函数并测试该函数是否正常工作。如果你有兴趣view my tests here.
在我的组件中,我有一个计时器,它每分钟检查一次消息是否应该更新。
const [date, setDate] = useState(new Date())
const timeOfDay = getTimeOfDay(date)
useEffect(() => {
const timer = setInterval(() => {
setDate(new Date())
}, 60000)
return () => {
clearInterval(timer)
}
}, [])
我一直在反复考虑是否测试此消息是否随着时间的推移而正确更改。我知道测试实现细节是不好的做法,我不确定这是一个实现细节还是应该测试的功能。
如果这是我应该测试的东西,我似乎无法轻松地实现一个计时器来检查消息,然后将计时器加速 8 小时。你有什么想法?
【问题讨论】:
-
好像you can set a mock date in Jest。还找到了this article。因此,似乎可以在一天中的不同时间对此进行测试。
-
将时间视为依赖项(参见here 的一种方式),那么很容易编写多个不同时间的测试——早上、下午、晚上,如果你愿意,可以更详细地了解转换点。
-
所以我认为我首先关心的是这是否是一个实现细节。
-
@Jamie 在这种情况下有点模糊。在纯粹的技术上,它是一个实现细节。如果你把函数当作一个黑盒子,你不知道它是否使用
Date。另一方面,如果它总是返回“晚安,Jane”,那么这是一个错误的实现。这些是需要测试以确保正确性的案例。因此,从实用的角度来看,应该可以测试该函数在不同时间是否正确运行。 jonsharpe 将依赖项外部化的建议是完美的中间立场 - 它不再是实现细节。
标签: reactjs jestjs best-in-place