Jor*_*ans 8 postgresql mocha.js node.js sinon
我有以下堆栈
我编写了一堆端到端测试来测试我所有的网络服务。问题是其中一些是时间相关的(如“给我最后 X 秒的修改记录”)。
sinon非常擅长模拟 Node 中所有与时间/日期相关的内容,但是modified我的 Postgresql 表中有一个字段填充了触发器:
CREATE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
问题当然是sinon无法覆盖该now()功能。
关于如何解决这个问题的任何想法?问题不是在测试开始时设置特定日期,而是提前时间比实时快(在我的一个测试中,我想更改数据库中的某些内容,将“当前时间”提前一天,更改数据库中还有一些东西,并进行网络服务调用以查看结果)。
我自己可以找出一些解决方案,但它们都涉及更改应用程序代码并使其不那么优雅。我认为您的应用程序代码不应受到您想要测试它的影响。
Pau*_*aul -1
老实说,数据库内部的东西总是很难从应用程序代码中进行测试。根据我的经验,最好的办法就是验证记录的状态。
因此,不要专门测试 now 函数是否在内部调用,而是编写一个创建新记录的测试,然后验证该记录已创建并修改了字段集。那时它们应该彼此相等,并且可能在最后一两秒内,所以这就是您可以编写断言的所有内容。
然后,您编写另一个测试来更改记录中的某些值,并编写断言:修改后的标记与创建的标记不同,是更新的,并且可能在最后一秒或两秒内。
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |