2015-01-29 3 views
9

У меня есть следующие gulpfile.js:Задания зависимостей с глотком-жасмином

var gulp = require('gulp'), 
    jasmine = require('gulp-jasmine'); 

gulp.task('default', function() { 
    return gulp 
     .src('spec/test.js') 
     .pipe(jasmine()); 
}); 

Код внутри spec/test.js использует глобальную переменную angular, однако, и выдает ошибку о том, что быть неопределенным, когда я бег глоток задачи default. Предположим, что angular определен в файле spec/lib.js, в глобальном масштабе.

Как сообщить jasmine() какие зависимости необходимо загрузить сначала в глобальную область перед запуском describe() s внутри test.js? Другими словами, как я могу сообщить jasmine(), чтобы загрузить spec/lib.js, прежде чем запускать тесты?

+1

Добавьте его к вызову 'src', возможно? 'gulp.src (['spec/lib.js', 'spec/test.js'])'. Вы также можете использовать * wiredep *, если вы используете зависимости bower – Phil

+0

Я борюсь с тем же сражением, я попытался передать объект конфигурации функции jasmine pipe, например 'jasmine ({config: {files: [" foo.js " , "bar, js"]}}) 'но он все еще не работает в моем случае – VictorArcas

ответ

2

Вы попробовали KARMA?

KARMA LINK

Если вы используете карма, жасмин и глотка, которые я делаю, вы можете настроить тестирование, как этот

В gulpfile.js

var gulp = require('gulp'); 
var karma = require('karma').server; // Note the server property here. 

gulp.task('karma', function (done) { 
    karma.start({ 
    configFile: __dirname + '/karma.conf.js' 
    }, done); 
}); 

Вам нужно будет импортировать ng-html2js для угловых шаблонов

npm install ng-html2js 

В karma.config.js (Вы должны создать)

module.exports = function(config) { 

    config.set({ 

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

    frameworks: ['jasmine'], 

    files: setFilesUpForTesting(), 

    // list of files to exclude during testing. CHANGE THIS TO YOURS!!! 
    exclude: [ 
    'public/js/boot.js', 
    'public/js/socket.io.js' 
    // 'yourRootPath/folder/stuff.js 
    ], 

    // NOTE THE NG-HTML2JS preprocessor you will need via NPM.  
    preprocessors: { 
    // CHANGE TO YOUR PATH for all HTML PARTIALS. 
    'public/directives/**/partials/*.html': 'ng-html2js', 
    'public/directives/**/*.js': ['coverage'] 
    }, 

    ngHtml2JsPreprocessor: { 
    stripPrefix:'public', 
    moduleName: 'templates' 
    }, 

    reporters: ['progress', 'coverage'], 

    coverageReporter: { 
    type : 'html', 
    dir : 'coverage/' 
    }, 

    port: 9876, 

    colors: true, 

    // 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: true, 

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

// ------------------------------------------------------------------ > 
// Below code is for running either single or all test files. 
// To run a single test, just pass in the test file name like so... 

// If the test file name was rs-test-me-now_spec.js 
// To spool up Karma you would enter 

// gulp karma --single-test=rs-test-me-now <note the proceeding double hyphen> 
// To just run all tests 
// gulp karma 

// CHANGE THE FILE PATHS BELOW!!!!! 

var fixedPath = [ 
    'public/js/jquery.js', 
    'public/js/jquery-ui.min.js', 
    'public/js/foundation.min.js', 
    'public/js/angular.min.js', 
    'public/js/angular-mocks.js', 

]; 

var baseTestPath = 'public/test/'; // CHANGE THIS TO YOUR ROOT PATH!!! 

function setFilesUpForTesting(){ 
    fixedPath.push(testPath()); 
    return fixedPath; 
} 

function testPath(){ 
    return singleTestPath() || fullTestPath(); 
} 

function fullTestPath(){ 
    return 'public/test/**/*_spec.js'; // CHANGE THIS TO YOUR SPEC FOLDER!!! 
    // like rootFolder/somethinghere/spec/**/*_spec.js 
    // note the underscore that proceeds the spec.js. Get rid of if you file name does not have it. 
} 

function singleTestPath(){ 
    var passedArgument = process.argv.filter(function(item){ if(/--single-test=/.test(item)){return item; }}); 
    if(isEmpty(passedArgument)){ return false; } 
    return baseTestPath + '**/*' + fileName(passedArgument) + '_spec.js'; 
} 

function fileName(argument){ 
    if(!argument){ return; } 
    return argument[0].replace('--single-test=', ''); 
} 

function isEmpty(array){ 
    return array.length === 0; 
} 

------------------- END KARMA.CONFIG.js file ---------------------- 

Теперь для запуска тестов

// To run all tests 
gulp karma 

// To run one single file test 
gulp karma --single-test=rs-test-me-now 

ПРИМЕЧАНИЕ: Если вы не можете заставить его работать сразу, дайте мне знать, и мы будем его TS. Возможно, я что-то пропустил. Мои тестовые файлы называются something_test.js, а не something_spec.js. Я изменил код для создания _spec.js. Кроме того, вы должны убедиться, что вы включили все файлы, необходимые для запуска Angular. Я привел несколько примеров в своем karma.config.js. Я тоже убегаю.

Препроцессор (ng-html2js) компилирует угловые шаблоны для директив. Вы должны установить его в свой пакет package.json.