我使用nodejs为我们的API创建端到端测试套件。在每次测试运行之前,我需要为该测试插入数据库记录。许多表都没有使用本机自动增量类型字段作为主键。
(我知道,数据库设计不好。但我无法控制它。)
相反,它们使用postgresql常用的序列模式。但这是在MS SQL Server中。因此,有一个存储过程可以获取下表中使用的序列号等等。
当我开始设置我的测试时,由于javascript的异步性质,我发现我的事务彼此冲突。基本上,事务获得相同的序列号,然后尝试相互提交。因此,独特的约束失败了。
我想到的第一个解决方案(我对其他人开放)就是在运行任何测试之前设置所有数据库记录。但据我所知,Jasmine的beforeAll()函数仅适用于它所在的文件。我需要一个beforeAll()函数,该函数在所有Jasmine测试运行之前运行。
Jasmine有类似的东西吗?如果没有,有没有办法在nodejs中创建一个控制器,它将在数据库中设置测试用例,然后以编程方式生成jasmine?
提前致谢!
答案 0 :(得分:0)
看起来Jasmine可以通过编程方式由nodejs生成。我找到了使用以下代码执行此操作的方法:
... Do database setup stuff here ...
.then(() => {
const Jasmine = require('jasmine');
const jasmine = new Jasmine();
jasmine.loadConfig({
spec_dir: 'spec'
,spec_files: [
'**/*[Ss]pec.js'
]
,helpers: [
'helpers/**/*.js'
]
,random: false
});
jasmine.execute();
});
这将有效,因为我可以将此代码放入promise.then()回调中,并在完成数据库设置工作后执行它。