Comment l'unité de tester une méthode qui se connecte à mongo, sans connexion à mongo?
Je suis en train d'écrire un test pour tester une méthode qui se connecte à mongo, mais je n'ai pas vraiment envie d'avoir mongo en cours d'exécution et, en fait, la connexion à celui-ci d'avoir mes tests à passer avec succès.
Voici mon test est réussi lorsque mon mongo démon est en cours d'exécution.
describe('with a valid mongo string parameter', function() {
it('should return a rejected promise', function(done) {
var con = mongoFactory.getConnection('mongodb://localhost:27017');
expect(con).to.be.fulfilled;
done();
});
});
mongoFactory.getConnection code:
getConnection: function getConnection(connectionString) {
//do stuff here
//Initialize connection once
MongoClient.connect(connectionString, function(err, database) {
if (err) {
def.reject(err);
}
def.resolve(database);
});
return def.promise;
}
Une bonne raison pourquoi je veux c'est que mes tests d'unité tous s'appuient sur la réalité de la connexion à mongo, de sorte qu'ils échouent si mongod n'est pas en cours d'exécution. Ce qui signifie qu'ils ont tous échoué lors de la construction sur travis ci par exemple.
double possible de: stackoverflow.com/questions/12526160/... et stackoverflow.com/questions/10378116/...
aucune expérience de ce type, mais au premier coup d'œil Sinon.JS peut aider à l'aide de talons et se moque: npmjs.org/package/sinon
double possible de: stackoverflow.com/questions/12526160/... et stackoverflow.com/questions/10378116/...
aucune expérience de ce type, mais au premier coup d'œil Sinon.JS peut aider à l'aide de talons et se moque: npmjs.org/package/sinon
OriginalL'auteur Catfish | 2014-08-30
Vous devez vous connecter pour publier un commentaire.
Il ya un couple de réponses liées à l'unité de test de code qui utilise MongoDB comme une banque de données:
Je vais faire une tentative, de la consolidation de ces solutions.
Préambule
D'abord et avant tout, vous devrait voulez MongoDB être en cours d'exécution lors de l'exécution de vos tests. MongoDB est le langage de requête est complexe, de sorte que l'exécution légitime de requêtes sur un stable MongoDB instance est nécessaire pour assurer que vos requêtes sont exécutées comme prévu et que votre application est de répondre correctement les résultats. Avec cela à l'esprit, cependant, vous devriez jamais de l'exécution des tests sur un système de production, mais plutôt un système périphérique à votre environnement d'intégration. Cela peut être sur la même machine que votre de CI, de logiciels, ou tout simplement relativement proches (en termes de processus, pas nécessairement réseau ou géographiquement parlant).
Cette ENV pourraient être faible encombrement et complètement dans la mémoire (ressource 1) (ressource 2), mais pas nécessairement les mêmes caractéristiques de performance que votre production ENV. (Si vous voulez test de performance, cela devrait être géré dans un environnement distinct de votre de CI de toute façon.)
Installation
mongod
service spécifiquement pour la CI. Si repl ensembles et/ou la fragmentation, sont un sujet de préoccupation (par exemple, écrire souci, pas d'utilisation de$isolated
, etc.), il est possible de simuler un environnement en cluster par l'exécution de plusieursmongod
instances (1 config, 2x2 données pour shard+repl) et unmongos
exemple, sur la même machine avec certains init.d scripts/tweaks ou quelque chose comme docker.NODE_ENV=int
. Au sein de ces configurations de votre base de données de chaînes de connexion diffèrent. Si vous êtes pas l'aide spécifique env configs, commencer à faire cela comme un moyen d'abstraire l'application des paramètres d'exécution (c'est à dire "local", "dev", "int", "pre", "prod", etc.). Je peux fournir un échantillon sur demande.mongodb-agencements
etnode-base de données-cleaner
. Les luminaires de fournir un travail et cohérente de l'ensemble de données pour les essais de: penser comme un bootstrap.Builds/Tests
node-database-cleaner
.mongodb-fixtures
.Sur l'autre main...
Si vous décidez que pas MongoDB en cours d'exécution est la bonne approche (et vous ne voudriez pas être le seul), puis l'abstraction de votre banque de données des appels à partir du pilote avec un ORM est votre meilleur pari (pour l'ensemble de l'application, et pas seulement les tests). Par exemple, quelque chose comme
prétend être de la base de données agnostique, bien que je n'ai jamais utilisé. En utilisant cette approche, vous auriez encore besoin luminaires et env configurations, cependant, vous ne serait pas nécessaire d'installer MongoDB. L'inconvénient ici est que vous êtes à la merci de l'ORM vous choisissez.
OriginalL'auteur zamnuts
Vous pouvez essayer de tingodb.
Non, cela signifie que tous les dispositifs mis en œuvre par MongoDB sont pris en charge par TingoDB, mais les plus courantes sous-ensemble est-il. C'est pourquoi j'ai précisément dit "essayer" tingodb.
OriginalL'auteur Alex Lapa