2016-05-16 5 views
0

У моего узла есть довольно большой набор тестов, который зависит от модуля ShouldJS. Проблема в том, что библиотеки блокируют присвоение объектов объектам .should, но моему набору тестов необходимо развернуть сервер, который должен быть макетным (т.е. работать в том же процессе, что и мой тестовый набор), и динамически создавать запросы ElasticSearch, которые необходимо установить .should собственности на объекты.Un-require node ShouldJS

Я попытался не потребовать использования ShouldJS с использованием подхода described here. Но это не помогло - см. Пример сценария ниже. Есть ли обходной путь или альтернативный подход?

Пример:

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); 

, который не дает этого:

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: {} } } 

Ни один из .should свойств становятся назначены.

ответ

1

Там есть способ превратить ShouldJS должен добытчика и выключаться:

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); 

Вот что официальная Readme говорит:

Также можно использовать should.js без добытчика (это будет даже не пытайтесь расширить Object.prototype), просто требуйте ('should/as-function'). Или, если вы уже используете версию, которая автоматически добавляет getter, вы можете вызвать функцию .noConflict.

Результаты (что-то) .Should добытчик и должен (что-то), в большинстве случаев одни и те же