20
我有貓鼬以下模式:貓鼬和獨特的領域
var SimSchema = new Schema({
msisdn : { type : String , unique : true, required : true },
imsi : { type : String , unique : true, required : true },
status : { type : Boolean, default: true},
signal : { type : Number },
probe_name : { type: String , required : true }
});
我對msisdn
和imsi
unique
選項。
在某些情況下,此條件得到了很好的尊重。 對於以下mocha
測試:
"use strict";
var app = require('../../app');
var http = require('http');
var request = require('supertest');
var mongoose = require('mongoose');
var should = require('should');
describe('[ Sim controller ] ', function(){
before(function(done) {
app.set_env('test');
this.server = app.start(function() {
mongoose.connection.db.dropDatabase(function() {
done();
})
});
});
beforeEach(function(done){
done();
});
it('Sim with good parameters should be created in the database', function(done){
var newSim = {
msisdn: '1234',
imsi: '007',
probe_name: 'BOUCHON_1'
};
request(this.server)
.post('/sims')
.set('Content-Type', 'application/json')
.send(newSim)
.expect(200).end(function(err, res) {
if (err) return done(err);
res.body.should.have.property('imsi');
res.body.should.have.property('probe_name');
res.body.should.have.property('msisdn');
setTimeout(function() {
done();
}, 1000);
});
});
it('Sim imsi/msisdn is unique in the database', function(done){
var newSim = {
msisdn: '1234',
imsi: '007',
probe_name: 'BOUCHON_1'
};
request(this.server)
.post('/sims')
.set('Content-Type', 'application/json')
.send(newSim)
.expect(200).end(function(err, res) {
if (err) return done(err);
res.body.should.have.property('error').equal('Duplicate Item');
done();
});
});
after(function(done) {
app.stop(done);
});
});
它的正常工作,如果我直接運行:
julio$ mocha test/controllers/ctrl_sim.js
,但如果我運行它得益於隱性選項失敗:
1) [ Sim controller ] Sim imsi/msisdn is unique in the database:
Uncaught AssertionError: expected { __v: 0,
imsi: '007',
msisdn: '1234',
probe_name: 'BOUCHON_1',
_id: '530a2b7f52273aa90783baf0',
status: true } to have property 'error'
我在堆棧上讀到,有時候unique
條件沒有得到很好的尊重,因爲索引沒有被刷新。 你認爲這是我的情況嗎?實際上,我刪除了每個摩卡測試套件的數據庫。也許mongo沒有時間重新創建所有的索引。
任何想法?
我無法理解使用dropDups'的'。你能詳細說明一下嗎? –
@VikasBansal我猜如果你將dropDups設置爲true,那麼mongodb會刪除先前創建的重複項(如果有的話) –
@HasaanAli不完全 - dropDups意味着MongoDB將「丟棄」試圖創建記錄的任何查詢,數據庫中已經存在。 例如:如果您已經有一個名爲「bob」的記錄,並且您嘗試使用'name:bob'插入另一條記錄,則此插入將由於dropDups而失敗。 –