aboutsummaryrefslogtreecommitdiff
path: root/test/unit
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2016-10-26 16:46:32 +0200
committerRoger Braun <roger@rogerbraun.net>2016-10-26 16:46:32 +0200
commit191c02af1ebfc7e6c53dc88d97c4e3ca23fbea8b (patch)
treeb3a132f8eba6ee92d6ec2a581f0bf33e1852010b /test/unit
Basic skeleton
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/.eslintrc9
-rw-r--r--test/unit/index.js13
-rw-r--r--test/unit/karma.conf.js75
-rw-r--r--test/unit/specs/Hello.spec.js13
4 files changed, 110 insertions, 0 deletions
diff --git a/test/unit/.eslintrc b/test/unit/.eslintrc
new file mode 100644
index 00000000..959a4f4b
--- /dev/null
+++ b/test/unit/.eslintrc
@@ -0,0 +1,9 @@
+{
+ "env": {
+ "mocha": true
+ },
+ "globals": {
+ "expect": true,
+ "sinon": true
+ }
+}
diff --git a/test/unit/index.js b/test/unit/index.js
new file mode 100644
index 00000000..03b19e32
--- /dev/null
+++ b/test/unit/index.js
@@ -0,0 +1,13 @@
+// Polyfill fn.bind() for PhantomJS
+/* eslint-disable no-extend-native */
+Function.prototype.bind = require('function-bind')
+
+// require all test files (files that ends with .spec.js)
+const testsContext = require.context('./specs', true, /\.spec$/)
+testsContext.keys().forEach(testsContext)
+
+// require all src files except main.js for coverage.
+// you can also change this to match only the subset of files that
+// you want coverage for.
+const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
+srcContext.keys().forEach(srcContext)
diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js
new file mode 100644
index 00000000..048b7290
--- /dev/null
+++ b/test/unit/karma.conf.js
@@ -0,0 +1,75 @@
+// This is a karma config file. For more details see
+// http://karma-runner.github.io/0.13/config/configuration-file.html
+// we are also using it with karma-webpack
+// https://github.com/webpack/karma-webpack
+
+var path = require('path')
+var merge = require('webpack-merge')
+var baseConfig = require('../../build/webpack.base.conf')
+var utils = require('../../build/utils')
+var webpack = require('webpack')
+var projectRoot = path.resolve(__dirname, '../../')
+
+var webpackConfig = merge(baseConfig, {
+ // use inline sourcemap for karma-sourcemap-loader
+ module: {
+ loaders: utils.styleLoaders()
+ },
+ devtool: '#inline-source-map',
+ vue: {
+ loaders: {
+ js: 'isparta'
+ }
+ },
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env': require('../../config/test.env')
+ })
+ ]
+})
+
+// no need for app entry during tests
+delete webpackConfig.entry
+
+// make sure isparta loader is applied before eslint
+webpackConfig.module.preLoaders = webpackConfig.module.preLoaders || []
+webpackConfig.module.preLoaders.unshift({
+ test: /\.js$/,
+ loader: 'isparta',
+ include: path.resolve(projectRoot, 'src')
+})
+
+// only apply babel for test files when using isparta
+webpackConfig.module.loaders.some(function (loader, i) {
+ if (loader.loader === 'babel') {
+ loader.include = path.resolve(projectRoot, 'test/unit')
+ return true
+ }
+})
+
+module.exports = function (config) {
+ config.set({
+ // to run in additional browsers:
+ // 1. install corresponding karma launcher
+ // http://karma-runner.github.io/0.13/config/browsers.html
+ // 2. add it to the `browsers` array below.
+ browsers: ['PhantomJS'],
+ frameworks: ['mocha', 'sinon-chai'],
+ reporters: ['spec', 'coverage'],
+ files: ['./index.js'],
+ preprocessors: {
+ './index.js': ['webpack', 'sourcemap']
+ },
+ webpack: webpackConfig,
+ webpackMiddleware: {
+ noInfo: true
+ },
+ coverageReporter: {
+ dir: './coverage',
+ reporters: [
+ { type: 'lcov', subdir: '.' },
+ { type: 'text-summary' }
+ ]
+ }
+ })
+}
diff --git a/test/unit/specs/Hello.spec.js b/test/unit/specs/Hello.spec.js
new file mode 100644
index 00000000..a6965db0
--- /dev/null
+++ b/test/unit/specs/Hello.spec.js
@@ -0,0 +1,13 @@
+import Vue from 'vue'
+import Hello from 'src/components/Hello'
+
+describe('Hello.vue', () => {
+ it('should render correct contents', () => {
+ const vm = new Vue({
+ el: document.createElement('div'),
+ render: (h) => h(Hello)
+ })
+ expect(vm.$el.querySelector('.hello h1').textContent)
+ .to.equal('Welcome to Your Vue.js App')
+ })
+})