如何使用 Wolfpack.js 测试我的 Sails.js 模型的唯一电子邮件属性?

How can I test my Sails.js model's unique email attribute with Wolfpack.js?

我正在使用 Wolfpack.js 来避免必须 'lift' 我的 Sails 并且我 运行 遇到没有数据库来测试我的 'unique' 属性的问题要求反对。我试着只发出两次请求,但由于它是如何伪造数据库的,我似乎无法向那个伪造的数据库添加东西……如果没有数据库,我如何测试我的模型的要求?有没有办法 'fake' 我的数据库的 'duplicate key' 响应,以便我的模型可以触发 'unique' 要求和 return 我的测试错误?

我的模特:

module.exports = {

  attributes: {
    email: {
      type: 'email',
      required: true,
      notEmpty: true,
      unique: true
    },
    ...
  }

};

我的测试:

it('should return `already exists` error when email already exists', function (done) {
    User.create({ email: 'test@example.com', password: 'P4$sword1234' }, function (err, user) {
      should.exist(err);
      err.message.should.have.string('that `email` already exists');
      should.not.exist(user);

      done();
    });
  });

这是最好的方法吗?我完全走错路了吗?另外,我是否应该测试 return 来自 Sails.js 自己的验证的错误消息字符串?我担心我应该如何告诉控制器来自模型的错误。

使用 wolfpack 测试错误的最佳方法是使用 setErrors 方法:https://github.com/fdvj/wolfpack#mocking-errors

我写了这些文章以及解释如何在更复杂的应用程序中使用 Wolfpack: https://fernandodevega.com/en/2015/12/19/functional-testing-a-sailsjs-api-with-wolfpack-part-3/

所以在你的情况下,在你的设置中,你可以做这样的事情

User.setErrors('that `email` already exists');
User.create({ email: 'test@example.com', password: 'P4$sword1234' }, function (err, user) {
  should.exist(err);
  err.message.should.have.string('that `email` already exists');
  should.not.exist(user);

  done();
});