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

时间:2016-02-29 21:25:47

标签: javascript mocking sails.js sinon stub

我正在使用Wolfpack.js以避免“抬起”我的Sails而且我遇到了一个没有数据库来测试我的'独特'属性要求的问题。我试图解雇请求两次,但是如果它假装数据库,我似乎无法添加到那个假数据库的东西......如何在没有数据库的情况下测试我的模型的要求?有没有办法'伪造'我的数据库的'重复键'响应,所以我的模型可以触发'唯一'的要求并将错误返回给我的测试?

我的模特:

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

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

1 个答案:

答案 0 :(得分:2)

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