如何在所有测试文件之前运行Jasmine

时间:2018-04-02 17:17:40

标签: sql-server node.js postgresql jasmine

我使用nodejs为我们的API创建端到端测试套件。在每次测试运行之前,我需要为该测试插入数据库记录。许多表都没有使用本机自动增量类型字段作为主键。

(我知道,数据库设计不好。但我无法控制它。)

相反,它们使用postgresql常用的序列模式。但这是在MS SQL Server中。因此,有一个存储过程可以获取下表中使用的序列号等等。

当我开始设置我的测试时,由于javascript的异步性质,我发现我的事务彼此冲突。基本上,事务获得相同的序列号,然后尝试相互提交。因此,独特的约束失败了。

我想到的第一个解决方案(我对其他人开放)就是在运行任何测试之前设置所有数据库记录。但据我所知,Jasmine的beforeAll()函数仅适用于它所在的文件。我需要一个beforeAll()函数,该函数在所有Jasmine测试运行之前运行。

Jasmine有类似的东西吗?如果没有,有没有办法在nodejs中创建一个控制器,它将在数据库中设置测试用例,然后以编程方式生成jasmine?

提前致谢!

1 个答案:

答案 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()回调中,并在完成数据库设置工作后执行它。