Mangouste & champ unique
J'ai le schéma suivant avec la mangouste:
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 }
});
J'ai unique
option pour le msisdn
et imsi
.
Dans certains cas, cette condition est respectée.
Pour la suite mocha
test:
"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);
});
});
Ça fonctionne si je le lance directement:
julio$ mocha test/controllers/ctrl_sim.js
Mais Si je le lance grâce à la récessive option, elle a échoué:
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'
J'ai lu sur pile que, parfois, la unique
condition n'est pas respectée, l'indice n'est pas actualisé.
Vous pensez que c'est mon cas? En fait, j'ai supprimer la base de données pour chaque moka suite de tests. Peut-être mongo n'ont pas le temps de recréer tous les indices à chaque fois.
Une idée?
Vous devez vous connecter pour publier un commentaire.
Utilisation
dropDups
pour assurer la chute des enregistrements en double dans vos schémas similaires;Et avant l'exécution de vos tests, redémarrez mongodb
dropDups
. pouvez-vous veuillez donner des précisions?name:bob
et vous essayez d'insérer un enregistrement avecname:bob
puis cette insertion échoue en raison de dropDups.unique
est pour indexer uniquementdropDups
option documentation dans la mangouste, quelqu'un pourrait-il poster le lien?