2014-11-27 2 views
1

Здравствуйте, у меня есть проект, который использует gulp для рамки сборки, и использовал карму с жасмином для тестирования.«require not defined» при тестировании с помощью проксиквизифицирующих заглушек

Я пытаюсь интегрировать proxyquireify для издевательства над требованиями, я просто добавил proxyquireify как браузерный плагин в конфиге karma, поскольку я использую karma-browserify.

Но это приводит к ошибке при запуске тестов в первой строке, говоря, что «require is undefined».

Что я делаю неправильно?

вот моя карма конфигурации конфигурации

// Карма // Сформирован ср 26 ноября 2014 17:57:28 GMT + 0530 (IST)

module.exports = function(config) { 
    config.set({ 

    // base path that will be used to resolve all patterns (eg. files, exclude) 
    basePath: '', 


    // frameworks to use 
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 
    frameworks: ['browserify', 'jasmine'], 


    // list of files/patterns to load in the browser 
    files: [ 
     './components/renderer/**/*.spec.js', 
     './components/tracker/**/*.spec.js' 
    ], 


    // list of files to exclude 
    exclude: [ 
    ], 


    // preprocess matching files before serving them to the browser 
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
    preprocessors: { 
     './components/**/*.spec.js' : [ 'browserify' ] 
    }, 

    browserify: { 
     debug:true, 
     plugin: ['proxyquireify/plugin'] 
    }, 


    // test results reporter to use 
    // possible values: 'dots', 'progress' 
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter 
    reporters: ['spec'], 


    // web server port 
    port: 9876, 


    // enable/disable colors in the output (reporters and logs) 
    colors: true, 


    // level of logging 
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 
    logLevel: config.LOG_INFO, 


    // enable/disable watching file and executing tests whenever any file changes 
    autoWatch: false, 


    // start these browsers 
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 
    browsers: ['Chrome'], 


    // Continuous Integration mode 
    // if true, Karma captures browsers, runs the tests and exits 
    singleRun: false 
    }); 
}; 
+0

, кажется, proxyquireify заменяет функцию требуется, но оленья кожа установить функцию в окне, я добавил требуется = к функции, определенные в lib/prelude.js, и кажется, все работает, это ошибка? –

+0

Можете ли вы рассказать о том, как вы его решили? –

+1

@EliWhite OK добавит решение, которое я реализовал в качестве ответа, если это будет полезно для вас. –

ответ

1

proxyquireify работает внутренне подставляя требуется функция, предоставляемая браузером.

В этом случае кажется, что новая функция замещения требует, чтобы функция глобального доступа не подвергалась.

Я прошел через код и обнаружил, что proxyquireify создает новую требуемую функцию в node_modules/proxyquireify/lib/prelude.js, названную как newRequire.

вопрос я имел в том, что функция newRequire не подвергалась в глобальной области как функции требуют, поэтому я изменил node_modules/proxyquireify/Библиотека/prelude.js так, что

// Override the current require with this new one 
return newRequire; 

становится

// Override the current require with this new one 
require = newRequire; 

и newRequire были должным образом выставлены на глобальный охват, и все работало нормально. Поскольку это изменение сбрасывается каждый раз, когда я делаю НУЮ установку, я создал глоток задачу в моем случае, который делает это изменение каждый раз перед запуском тестов, я добавлю задачу глотка для справки

// Task to modify proxyquireify so that it works properly, there is a bug in the npm library 
gulp.task('_patch:proxyquireify', function() { 
    gulp.src(['./node_modules/proxyquireify/lib/prelude.js']) 
    .pipe(replace(/return newRequire;/g, 'require = newRequire;')) 
    .pipe(gulp.dest('./node_modules/proxyquireify/lib')); 
}); 

я запускаю это задача перед выполнением тестовых заданий, как этого

// Task to run tests 
gulp.task('run:test', ['_patch:proxyquireify'], function() { 
    //logic to run tests 
}; 

Я надеюсь, что это помогает, спасибо

+3

Это решение вызывает [другие проблемы] (https://github.com/thlorenz/proxyquireify/issues/21#issuecomment-69747496), а проблема 'require not defined' была исправлена ​​с помощью proxyquireify v1.2. –