Jest在没有Jest的情况下对代码生成Mongoose验证错误

时间:2018-10-29 22:10:21

标签: javascript node.js mongoose jestjs

如果这很明显,请提前道歉。这很新。 我有以下猫鼬模式

userSchema = new mongoose.Schema({
email: {
    type: String,
    required: true,
    trim: true,
    minlength: 1,
    unique: true,
    validate: {
        isAsync: false,
        validator: validator.isEmail,
        message: '{VALUE} is not a valid email'
    }
},
password: {
    type: String,
    required: true,
    minlength: 6
},
tokens: [{
    access: {
        type: String,
        required: true
    },
    token: {
        type: String,
        required: true
    }
}]

});

以及以下用于保存新用户的功能:

    app.post('/users', (req, res) => {
  logger.log({level: 'debug', message: 'request body: ' + JSON.stringify(req.body)});
  var newUser = new User ({
      email: req.body.email,
      password: req.body.password
  });

  newUser.save()
    .then(() => {
      logger.log({level: 'debug', message: 'generating token...'});
      return newUser.generateAuthToken();
  }).then((token) => {
      logger.log({level: 'debug', message: 'setting token in response header...'});
      res.header('x-auth', token).send(newUser);
  }).catch((err) => {
      logger.log({level: 'debug', message: err});
      res.status(400).send(err);
  });
});

在节点上定期运行它时,一切正常,我可以创建一个新用户,并且在用户电子邮件已经存在时出现400错误。

但是,当使用Jest运行以下命令时:

it('responds with 400 when the user exists', function(done) {
  request(app)
    .post('/users')
    .send({email: 'andrew@example.com', password: 'abcdefghi'})
    .set('Accept', 'application/json')
    .expect(400,done)
});

测试失败,屏幕上直接显示以下错误:

MongoError: E11000 duplicate key error collection: test.users index: email_1 dup key: { : "andrew@example.com" }

这很奇怪,因为据我所知,我使用catch()处理所有错误,而使用邮差直接测试正在运行的应用程序时,不会发生相同的错误。 据我可以通过调试打印缩小它的范围,该错误似乎出在'save'函数中,但是由于某种原因,在使用jest时,其后链接的“ catch()”子句并没有捕获该错误。当定期运行该应用程序时,它会运行(我使用mongoose.Promise = global.Promise;运行Mongoose)。 或者,更有可能的是,Jest代码是错误的。 我查看了有关猫鼬和开玩笑的所有问题-大多数似乎都围绕种族而定-无法解决。

我确定这很愚蠢,但到目前为止还无法实现。

0 个答案:

没有答案