반응형
몽구스 & 고유 필드
몽구스가 있는 스키마는 다음과 같습니다.
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 }
});
있습니다unique
에 대한 옵션msisdn
그리고.imsi
.
어떤 경우에는 이 조건이 잘 존중됩니다.다음의 경우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
다음과 같은 스키마에서 중복 레코드를 삭제합니다.
var SimSchema = new Schema({
msisdn : { type : String , unique : true, required : true, dropDups: true },
imsi : { type : String , unique : true, required : true, dropDups: true },
status : { type : Boolean, default: true},
signal : { type : Number },
probe_name : { type: String , required : true }
});
그리고 테스트를 실행하기 전에 mongodb를 다시 시작합니다.
언급URL : https://stackoverflow.com/questions/21971666/mongoose-unique-field
반응형
'programing' 카테고리의 다른 글
RHEL에 Python 3 설치 (0) | 2023.05.28 |
---|---|
WPF의 프리즘이란 무엇입니까? (0) | 2023.05.28 |
7번째 항목에서 SQL Server 2012 열 ID가 6개에서 1000개 이상으로 증가 (0) | 2023.05.28 |
VB.NET - 각 루프에 대해 다음 항목 a로 이동하는 방법? (0) | 2023.05.28 |
Python 3.7 아나콘다 환경 - 가져오기 _ssl DLL 로드 실패 오류 (0) | 2023.05.28 |