J'utilise mocha
et chai
(avec chai-as-promised
) et je suis en train de tester une base de données MongoDB en utilisant mockgoose
.test de Mocha se bloque lorsque l'on compare l'objet mangouste avec un objet
Le modèle:
var Campaign = new Schema({
//Schema here
});
Campaign.statics.getOneById = function(id) {
return this.findOne({_id: id }).populate('channels').populate('units');
};
Le code testé:
function getCampaignById(id) {
return Campaign.getOneById(id);
}
Le code de test:
var chai = require('chai'),
chaiAsPromised = require('chai-as-promised'),
mongoose = require('mongoose'),
mockgoose = require('mockgoose'),
Campaign = require('../src/campaigns/models/campaign-model'),
Channel = require('../src/channels/models/channel-model'),
Unit = require('../src/units/models/unit-model'),
campaignRepo = require('../src/campaigns/lib/campaign-repository'),
config = require('../scripts/services/config');
chai.use(chaiAsPromised);
chai.should();
before(function(done) {
mockgoose(mongoose).then(function() {
mongoose.connect(config.db.dbStr, function(err) {
done(err);
})
})
});
describe('Campaign repository', function() {
var fullCampaign = {
country: {
dst:1,
timezone:'+02:00',
code:'AX',
name:'Åland Islands'},
name: 'This is campaign name',
startDate:'2017-02-19T22:00:00.000Z',
endDate:'2017-02-27T22:00:00.000Z',
creatives: ['creative'],
units:[],
channels:[],
money: {
action: {
event: 'interaction_loaded',
label: 'View'
},
currency: {
code: 'USD',
sign: '$'
},
budget: 11111,
costPerAction: 2
}
};
var newCampaign;
it('should create a new campaign', function() {
campaignRepo.create(fullCampaign).then(function(createdCampaign) {
newCampaign = createdCampaign;
});
});
it('should get the new campaign from the database', function() {
return (campaignRepo.getCampaignById(newCampaign._id)).should.eventually.equal(newCampaign);
});
});
Le problème est que la dernière vérification de l'égalité se bloque mocha:
Campaign repository
✓ should create a new campaign
1) should get the new campaign from the database
1 passing (141ms)
1 failing
Et quand faire les mêmes tests sur un objet non,
return (campaignRepo.getCampaignById(scopeNewCampaign._id)).should.eventually.equal('just a string');
mocha ne vient normalement.
Campaign repository
✓ should create a new campaign
1) should get the new campaign from the database
1 passing (141ms)
1 failing
1) Campaign repository should get the new campaign from the database:
AssertionError: expected { Object ($__, isNew, ...) } to equal 'just a string'
Malheureusement, votre proposition ne fonctionne pas, et comme je l'ai dit, le problème est plus que l'échec du test, c'est toute la suite de tests qui bloque le terminal. En ce qui concerne votre deuxième point, vous avez tout à fait raison, mais comme je commence à écrire ces tests et que j'ai rencontré ce problème, je n'ai pas entièrement conçu les tests. – dabn
Avez-vous une connexion à une base de données? –
une autre chose que je viens de remarquer, comme vous comparez les objets, vous devez utiliser l'égalité profonde: '.should.eventually.deep.equal' –