2016-05-16 4 views
0

Mon application de nœud dispose d'une suite de tests assez importante qui dépend du module ShouldJS. Le problème est que la bibliothèque bloque les propriétés .should sur les objets, mais ma suite de tests doit générer un serveur qui doit être simulable (ie exécuter le même processus que ma suite de tests) et générer dynamiquement des requêtes ElasticSearch, qui doivent être définies .should propriété sur les objets.Nœud non requis ShouldJS

J'ai essayé de ne pas requérir ShouldJS en utilisant une approche described here. Mais cela n'a pas aidé - voir l'exemple de script ci-dessous. Y a-t-il une solution de contournement ou une approche alternative?

Exemple:

require('should'); 

var objBefore = {}; 
objBefore.should = 'should1'; // doesn't get assigned! 
objBefore['should'] = 'should2'; // doesn't get assigned! 
console.log('Before:', objBefore); 

Object.keys(require.cache).forEach(function(path) { 
    if (path.indexOf('/node_modules/should/') === -1) return; 
    console.log('Un-requiring path', path); 
    delete require.cache[path]; 
}); 

var objAfter = {}; 
objAfter.should = 'should1'; // doesn't get assigned! 
objAfter['should'] = 'should2'; // doesn't get assigned! 
console.log('After:', objAfter); 

// still has shouldJS stuff 
console.log('objAfter.should:', objAfter.should); 

qui donne ceci:

Before: {} 
Un-requiring path /my/path/node_modules/should/index.js 
Un-requiring path /my/path/node_modules/should/lib/should.js 
... 
Un-requiring path /my/path/node_modules/should/lib/ext/contain.js 
Un-requiring path /my/path/node_modules/should/lib/ext/promise.js 
After: {} 
objAfter.should: Assertion { obj: {}, anyOne: false, negate: false, params: { actual: {} } } 

Aucun des .should propriétés sont attribuées se.

Répondre

1

Il y a un moyen de transformer ShouldJS devrait getter sur et en dehors:

require('should'); 
(1).should.be.equal(1); 

// turn off ShouldJS should getter 
// and use should as a function 
var should = require('should').noConflict(); 
should(0).be.equal(0); 
// turn on ShouldJS should getter 
should.extend(); 

require('should'); 
(1).should.be.equal(1); 

Voici ce que dit le Readme officiel:

Il est également possible d'utiliser should.js sans getter (intervertit même pas essayer d'étendre Object.prototype), juste require ('should/as-function'). Ou si vous utilisez déjà une version qui ajoute automatiquement getter, vous pouvez appeler la fonction .noConflict.

Résultats de (quelque chose) .should getter et devrait (quelque chose) dans la plupart des situations sont les mêmes