2015-01-29 22 views
9

Tôi đã sau gulpfile.js:phụ thuộc Xác định với ngụm-hoa nhài

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

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

Các mã bên spec/test.js sử dụng một biến angular toàn cầu, tuy nhiên, và ném một lỗi về điều đó là không xác định khi tôi chạy ngụm nhiệm vụ default. Giả sử angular được định nghĩa trong tệp spec/lib.js, trong phạm vi toàn cầu.

Làm cách nào để biết jasmine() phụ thuộc nào cần tải trước vào phạm vi toàn cầu trước khi chạy describe() s bên trong test.js? Nói cách khác, làm cách nào để tôi yêu cầu jasmine() tải trước spec/lib.js trước khi chạy thử nghiệm?

+1

Thêm vào cuộc gọi 'src' có lẽ? 'gulp.src (['spec/lib.js', 'spec/test.js'])'. Bạn cũng có thể sử dụng * wiredep * nếu bạn đang sử dụng các phụ thuộc bower – Phil

+0

Tôi đang chiến đấu cùng một trận chiến, tôi đã cố gắng chuyển một đối tượng cấu hình tới hàm hoa nhài như 'jasmine ({config: {files: [" foo.js " , "bar, js"]}}) 'nhưng nó vẫn không hoạt động trong trường hợp của tôi – VictorArcas

Trả lời

2

Bạn đã thử KARMA?

KARMA LINK

Nếu bạn sử dụng nghiệp, hoa nhài, và ngụm, mà tôi làm, bạn có thể cấu hình thử nghiệm của bạn như thế này

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

Bạn sẽ cần nhập khẩu ng-html2js cho các mẫu góc

npm install ng-html2js 

Trong karma.config.js (Bạn phải tạo)

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

Bây giờ để chạy thử nghiệm

// To run all tests 
gulp karma 

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

LƯU Ý: Nếu bạn không thể làm cho nó hoạt động bình thường, hãy cho tôi biết và chúng tôi sẽ xử lý nó. Có lẽ tôi đã bỏ lỡ điều gì đó. Các tệp thử nghiệm của tôi có tên là something_test.js, chứ không phải something_spec.js. Tôi đã thay đổi mã để tạo _spec.js. Ngoài ra, bạn phải chắc chắn rằng bạn đã bao gồm tất cả các tập tin bạn cần để chạy Angular. Tôi đã cung cấp một số ví dụ trong karma.config.js của mình. Tôi cũng sử dụng Angular.

Bộ tiền xử lý (ng-html2js) biên dịch các mẫu góc cho chỉ thị. Bạn phải cài đặt nó trong package.json của bạn.

Các vấn đề liên quan