returns Mongoose 承诺的单元测试功能

Unit Test function that returns Mongoose promise

要测试的代码

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();
        });
});

测试达到 return user.save() 然后超时。似乎我在单元测试中遗漏了一些东西,但是没有抛出任何错误。我正在使用 sinon-as-promised 来解决承诺,但它似乎没有看到它。

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

请确认一下,当在路由器中调用的 userCreate 函数成功时,您是否返回了 200 状态码?

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