/*global module:false*/ module.exports = function(grunt) { // Do not report warnings from unit-tests exercising deprecated paths process.env.NO_DEPRECATION = 'loopback'; grunt.loadNpmTasks('grunt-mocha-test'); // Project configuration. grunt.initConfig({ // Metadata. pkg: grunt.file.readJSON('package.json'), banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' + '<%= grunt.template.today("yyyy-mm-dd") %>\n' + '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n', // Task configuration. uglify: { options: { banner: '<%= banner %>' }, dist: { files: { 'dist/loopback.min.js': ['dist/loopback.js'] } } }, jshint: { options: { jshintrc: true }, gruntfile: { src: 'Gruntfile.js' }, lib: { src: ['lib/**/*.js'] }, common: { src: ['common/**/*.js'] }, browser: { src: ['browser/**/*.js'] }, server: { src: ['server/**/*.js'] }, test: { src: ['test/**/*.js'] } }, jscs: { gruntfile: 'Gruntfile.js', lib: ['lib/**/*.js'], common: ['common/**/*.js'], server: ['server/**/*.js'], browser: ['browser/**/*.js'], test: ['test/**/*.js'] }, watch: { gruntfile: { files: '<%= jshint.gruntfile.src %>', tasks: ['jshint:gruntfile'] }, lib: { files: ['<%= jshint.lib.src %>'], tasks: ['jshint:lib'] }, test: { files: ['<%= jshint.test.src %>'], tasks: ['jshint:test'] } }, browserify: { dist: { files: { 'dist/loopback.js': ['index.js'], }, options: { ignore: ['nodemailer', 'passport', 'bcrypt'], standalone: 'loopback' } } }, mochaTest: { 'unit': { src: 'test/*.js', options: { reporter: 'dot', } }, 'unit-xml': { src: 'test/*.js', options: { reporter: 'xunit', captureFile: 'xunit.xml' } } }, karma: { 'unit-once': { configFile: 'test/karma.conf.js', browsers: ['PhantomJS'], singleRun: true, reporters: ['dots', 'junit'], // increase the timeout for slow build slaves (e.g. Travis-ci) browserNoActivityTimeout: 30000, // CI friendly test output junitReporter: { outputFile: 'karma-xunit.xml' }, browserify: { // Disable sourcemaps to prevent // Fatal error: Maximum call stack size exceeded debug: false, // Disable watcher, grunt will exit after the first run watch: false } }, unit: { configFile: 'test/karma.conf.js', }, e2e: { options: { // base path, that will be used to resolve files and exclude basePath: '', // frameworks to use frameworks: ['mocha', 'browserify'], // list of files / patterns to load in the browser files: [ 'test/e2e/remote-connector.e2e.js', 'test/e2e/replication.e2e.js' ], // list of files to exclude exclude: [ ], // test results reporter to use // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' reporters: ['dots'], // web server port port: 9876, // cli runner port runnerPort: 9100, // 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: 'warn', // enable / disable watching file and executing tests whenever any file changes autoWatch: true, // Start these browsers, currently available: // - Chrome // - ChromeCanary // - Firefox // - Opera // - Safari (only Mac) // - PhantomJS // - IE (only Windows) browsers: [ 'Chrome' ], // If browser does not capture in given timeout [ms], kill it captureTimeout: 60000, // Continuous Integration mode // if true, it capture browsers, run tests and exit singleRun: false, // Browserify config (all optional) browserify: { // extensions: ['.coffee'], ignore: [ 'nodemailer', 'passport', 'passport-local', 'superagent', 'supertest', 'bcrypt' ], // transform: ['coffeeify'], // debug: true, // noParse: ['jquery'], watch: true, }, // Add browserify to preprocessors preprocessors: {'test/e2e/*': ['browserify']} } } } }); // These plugins provide necessary tasks. grunt.loadNpmTasks('grunt-browserify'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-jscs'); grunt.loadNpmTasks('grunt-karma'); grunt.registerTask('e2e-server', function() { var done = this.async(); var app = require('./test/fixtures/e2e/app'); app.listen(0, function() { process.env.PORT = this.address().port; done(); }); }); grunt.registerTask('e2e', ['e2e-server', 'karma:e2e']); // Default task. grunt.registerTask('default', ['browserify']); grunt.registerTask('test', [ 'jscs', 'jshint', process.env.JENKINS_HOME ? 'mochaTest:unit-xml' : 'mochaTest:unit', 'karma:unit-once']); // alias for sl-ci-run and `npm test` grunt.registerTask('mocha-and-karma', ['test']); };