【问题标题】:How to populate a MongoDB database for e2e testing effectively如何有效地填充 MongoDB 数据库以进行 e2e 测试
【发布时间】:2019-11-11 10:40:27
【问题描述】:

我已经按照此处所述设置了我的环境:https://medium.com/developer-circles-lusaka/how-to-write-an-express-js-server-using-test-driven-development-921dc55aec07

这意味着我正在使用配置包来选择环境。

我想做的是在执行每个测试之前(重新)填充数据库。我希望这可以使用 Mocha 提供的 beforeEach() 钩子来完成(我使用 Mocha 作为测试运行器)。

我的问题是什么是一次将一堆数据全部加载到数据库中的有效方法(我正在使用 Mongoose 以防万一。我不知道插入时是否可以省略)?最好是在与测试分开的文件中完成。

【问题讨论】:

    标签: javascript mongodb express mocha.js e2e-testing


    【解决方案1】:

    这是我的工作:

    在 beforeEach 中完全删除数据库。您可以通过 mongoose 连接访问 mongodb 实例,例如:db.db.dropDatabase()

    为我的域创建预配置的数据对象并将它们保存在我导入的模块中 - 简单的 JavaScript 对象。所以我有 data.users.vader 和 data.users.luke、data.products.deathStar 等数据

    在我的测试中,我使用chaihttp 使用以下数据来命中路线:

    let user = data.users.vader;
    chai.request(server)
                        .post('/users')
                        .send(user)
                        .end((err, result) => {
                            if (err) {
                                return callback(err);
                            }
    
    result.should.have.status(200);
                            result.body.status.should.eq(enums.status.success);
                            result.body.data._id.should.be.a('string');
                            result.body.data.name.should.eq(user.name);
                            result.body.data.email.should.eq(user.email);
    

    每个单元测试都会删除数据库并创建所需的数据。我是这样开始的,这样每个测试都是独立的。

    您也可以稍后使用 mongodb 的 batchWriteItem 批量加载数据。

    我还创建了可以在单元测试中调用的函数,这些函数将使用 batchWriteItem 批量加载数据 - 这主要用于性能测试查询等

    【讨论】:

    • 我实际上最终做了类似的事情。使用 beforeEach 挂钩测试并删除数据库中的所有集合并为每个实体重新填充它们。但是将所需的功能存储在单独的文件中以进行代码组织。
    • 听起来不错,单元测试应该独立运行并设置和拆除测试所需的内容。值得从相关数据库中学习一些批量加载工具。祝项目的其余部分好运
    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 2013-10-17
    • 2022-10-21
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2016-06-02
    相关资源
    最近更新 更多