diff --git a/app/tests/example.js b/app/tests/example.js new file mode 100644 index 0000000..9a3a4da --- /dev/null +++ b/app/tests/example.js @@ -0,0 +1,9 @@ +// A sample Mocha test +describe('Array', function () { + describe('#indexOf()', function () { + it('should return -1 when the value is not present', function () { + assert.equal(-1, [1,2,3].indexOf(5)); + assert.equal(-1, [1,2,3].indexOf(0)); + }); + }); +}); diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..3faf88c --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,109 @@ +module.exports = function (config) { + const options = { + + // 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: ['mocha', 'chai'], + + + // list of files / patterns to load in the browser + files: ['app/tests/**/*.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: { + }, + + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // 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: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: [], + + customLaunchers: { + android: { + base: 'NS', + platform: 'android' + }, + ios: { + base: 'NS', + platform: 'ios' + }, + ios_simulator: { + base: 'NS', + platform: 'ios', + arguments: ['--emulator'] + } + }, + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false + }; + + setWebpackPreprocessor(config, options); + setWebpack(config, options); + + config.set(options); +} + +function setWebpackPreprocessor(config, options) { + if (config && config.bundle) { + if (!options.preprocessors) { + options.preprocessors = {}; + } + + options.files.forEach(file => { + if (!options.preprocessors[file]) { + options.preprocessors[file] = []; + } + options.preprocessors[file].push('webpack'); + }); + } +} + +function setWebpack(config, options) { + if (config && config.bundle) { + const env = {}; + env[config.platform] = true; + env.sourceMap = config.debugBrk; + env.appPath = config.appPath; + options.webpack = require('./webpack.config')(env); + delete options.webpack.entry; + delete options.webpack.output.libraryTarget; + const invalidPluginsForUnitTesting = ["GenerateBundleStarterPlugin", "GenerateNativeScriptEntryPointsPlugin"]; + options.webpack.plugins = options.webpack.plugins.filter(p => !invalidPluginsForUnitTesting.includes(p.constructor.name)); + } +} diff --git a/package.json b/package.json index 18c4706..f3b968a 100644 --- a/package.json +++ b/package.json @@ -24,13 +24,14 @@ "@nativescript/core": "~6.2.1", "@nativescript/theme": "./src", "bootstrap": "4.3.1", - "nativescript-picker": "~2.1.2", "nativescript-datetimepicker": "~1.2.2", + "nativescript-picker": "~2.1.2", "nativescript-themes": "2.0.1", "nativescript-ui-autocomplete": "~6.0.0", - "nativescript-ui-sidedrawer": "~8.0.0", "nativescript-ui-dataform": "~6.0.0", "nativescript-ui-listview": "~8.0.1", + "nativescript-ui-sidedrawer": "~8.0.0", + "nativescript-unit-test-runner": "^0.7.0", "tns-core-modules": "~6.2.1" }, "devDependencies": { @@ -38,9 +39,16 @@ "@babel/plugin-transform-modules-commonjs": "7.6.0", "babel-eslint": "10.0.3", "cache-loader": "4.1.0", + "chai": "4.2.0", "eslint": "6.4.0", "glob": "7.1.4", + "karma": "4.4.1", + "karma-chai": "0.1.0", + "karma-mocha": "1.3.0", + "karma-nativescript-launcher": "0.4.0", + "karma-webpack": "3.0.5", "lazy": "1.0.11", + "mocha": "6.2.2", "nativescript-dev-webpack": "~1.3.0", "resolve-url-loader": "3.1.0", "sass": "1.23.0",