MongooseJS独特的组合指数

时间:2014-02-10 03:12:16

标签: express mongoose mocha

我的架构是:

var ItemSchema = new Schema({
  sku: {
    type: String,
    trim: true,
    index: true,
    required: true
  },
  description: {
    type: String,
    trim: true,
    required: true
  },
  client_id: {
    type: Schema.ObjectId,
    ref: 'Client',
    index: true,
    required: true
  }
}, {versionKey: false, autoIndex: false});

ItemSchema.index({sku: 1, client_id: 1}, {unique: true});

我希望每个client_id的sku都是唯一的。所以我认为索引可以解决问题。我正在运行mocha单元测试,测试是:

  it('should fail if the sku is not unique per client', function(done) {
    var secondItem = validItem;
    return validItem.save(function(err) {
      should.not.exist(err);
      return secondItem.save(function(err) {
        should.exist(err);
        done();
      });
    });
  });

具有保存第二个项目(相同sku和相同client_id)的逻辑应该导致错误。但是,我没有得到任何错误:

  1) <Unit Test> Model Item: Method Save should fail if the sku is not unique per client:
     Uncaught AssertionError: expected null to exist

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的测试失败是因为您没有使用相同的skuclient_id将两个文档保存到数据库,而是将相同的文档保存到数据库中两次。

尝试创建新文档并从有效项目中复制skuclient_id

it('should fail if the sku is not unique per client', function(done) {
  var secondItem = new Item({
     sku: validItem.sku,
     client_id: validItem.client_id,
     description: 'Put whatever you want here'
  });
  return validItem.save(function(err) {
    should.not.exist(err);
    return secondItem.save(function(err) {
      should.exist(err);
      done();
    });
  });
});