mongodb - 返回 Mongoose promise 的单元测试函数

标签 mongodb unit-testing mongoose factory-bot sinon

要测试的代码

import { User } from '../models/no-sql/user';

function userCreate(req) {
    const user = new User({
       username: req.username,
        password: req.password
    });

   return user.save();
}

app.get('/userCreate', function(req, res) {
    User.findOne({ username: req.username }).lean().exec((err, data) => {
        if(data){
            userCreate(req).then(function() {
                // success
            }, function(err) {
                // error
            });
        }else{
        // no user found
        }   
    });
});

单元测试

    require('sinon-as-promised');
    import request from 'supertest';

    const user = {
        username: newUserName,
        password: 'password'
    };


    factory.build('user', user,  function(err, userDocument) {
        UserMock.
            expects('findOne').withArgs(sinon.match.any)
            .chain('lean')
            .chain('exec')
            .yields( null, undefined);

        const docMock = sinon.mock(userDocument);
        docMock.expects('save')
        .resolves([]);

        request(app)
        .post('/userCreate')
        .send({username: newUserName, password: 'password')
        .expect(200)
        .end((err, res) => {
            if(err) done(err);
            should.not.exist(err);
            should.equal(res.body.success, true);
            done();
        });
});

测试到达返回 user.save() 然后超时。似乎我在单元测试中遗漏了一些东西,但是没有引发错误。我正在使用 sinon-as-promised 来解决 promise ,但它似乎没有看到它。

最佳答案

为了简洁起见,您似乎不太可能故意在示例代码中省略 res.send() 调用。

只是为了确保,当路由器中调用的 userCreate 函数成功时,您是否返回 200 状态码?

userCreate(req).then(function() {
   // success
   res.status(200).send('User created successfully');
}

关于mongodb - 返回 Mongoose promise 的单元测试函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37632204/

相关文章:

Angular Mat对话框单元测试: This. dialogref.updatesize不是函数

java - PowerMock 静态方法 stub 似乎不起作用

javascript - $inc of mongoose 防止负值

node.js - 将 Mongoose 对象从 id 填充到新字段

mongodb - 使用 MapReduce 删除重复记录

java - hibernate OGM : Having trouble starting MongoDB database

Android:使用 Robolectric 和 Mockito 对 Android 应用程序进行单元测试

node.js - 在 Node.js 中保存大型文档时,MongoDB-mongoose 高 CPU 使用率

java - Morphia 0.110 找不到带有字符串 id 的引用

mongodb - 有没有办法强制 mongodb 在 ram 中存储某些索引?