aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/e2e/custom-assertions/elementCount.js26
-rw-r--r--test/e2e/nightwatch.conf.js46
-rw-r--r--test/e2e/runner.js31
-rw-r--r--test/e2e/specs/test.js19
-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
8 files changed, 232 insertions, 0 deletions
diff --git a/test/e2e/custom-assertions/elementCount.js b/test/e2e/custom-assertions/elementCount.js
new file mode 100644
index 00000000..c0d5fe00
--- /dev/null
+++ b/test/e2e/custom-assertions/elementCount.js
@@ -0,0 +1,26 @@
+// A custom Nightwatch assertion.
+// the name of the method is the filename.
+// can be used in tests like this:
+//
+// browser.assert.elementCount(selector, count)
+//
+// for how to write custom assertions see
+// http://nightwatchjs.org/guide#writing-custom-assertions
+exports.assertion = function (selector, count) {
+ this.message = 'Testing if element <' + selector + '> has count: ' + count
+ this.expected = count
+ this.pass = function (val) {
+ return val === this.expected
+ }
+ this.value = function (res) {
+ return res.value
+ }
+ this.command = function (cb) {
+ var self = this
+ return this.api.execute(function (selector) {
+ return document.querySelectorAll(selector).length
+ }, [selector], function (res) {
+ cb.call(self, res)
+ })
+ }
+}
diff --git a/test/e2e/nightwatch.conf.js b/test/e2e/nightwatch.conf.js
new file mode 100644
index 00000000..a5e55e90
--- /dev/null
+++ b/test/e2e/nightwatch.conf.js
@@ -0,0 +1,46 @@
+require('babel-register')
+var config = require('../../config')
+
+// http://nightwatchjs.org/guide#settings-file
+module.exports = {
+ "src_folders": ["test/e2e/specs"],
+ "output_folder": "test/e2e/reports",
+ "custom_assertions_path": ["test/e2e/custom-assertions"],
+
+ "selenium": {
+ "start_process": true,
+ "server_path": "node_modules/selenium-server/lib/runner/selenium-server-standalone-2.53.1.jar",
+ "host": "127.0.0.1",
+ "port": 4444,
+ "cli_args": {
+ "webdriver.chrome.driver": require('chromedriver').path
+ }
+ },
+
+ "test_settings": {
+ "default": {
+ "selenium_port": 4444,
+ "selenium_host": "localhost",
+ "silent": true,
+ "globals": {
+ "devServerURL": "http://localhost:" + (process.env.PORT || config.dev.port)
+ }
+ },
+
+ "chrome": {
+ "desiredCapabilities": {
+ "browserName": "chrome",
+ "javascriptEnabled": true,
+ "acceptSslCerts": true
+ }
+ },
+
+ "firefox": {
+ "desiredCapabilities": {
+ "browserName": "firefox",
+ "javascriptEnabled": true,
+ "acceptSslCerts": true
+ }
+ }
+ }
+}
diff --git a/test/e2e/runner.js b/test/e2e/runner.js
new file mode 100644
index 00000000..2a5c6ef9
--- /dev/null
+++ b/test/e2e/runner.js
@@ -0,0 +1,31 @@
+// 1. start the dev server using production config
+process.env.NODE_ENV = 'testing'
+var server = require('../../build/dev-server.js')
+
+// 2. run the nightwatch test suite against it
+// to run in additional browsers:
+// 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings"
+// 2. add it to the --env flag below
+// or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
+// For more information on Nightwatch's config file, see
+// http://nightwatchjs.org/guide#settings-file
+var opts = process.argv.slice(2)
+if (opts.indexOf('--config') === -1) {
+ opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
+}
+if (opts.indexOf('--env') === -1) {
+ opts = opts.concat(['--env', 'chrome'])
+}
+
+var spawn = require('cross-spawn')
+var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
+
+runner.on('exit', function (code) {
+ server.close()
+ process.exit(code)
+})
+
+runner.on('error', function (err) {
+ server.close()
+ throw err
+})
diff --git a/test/e2e/specs/test.js b/test/e2e/specs/test.js
new file mode 100644
index 00000000..a7b1bd92
--- /dev/null
+++ b/test/e2e/specs/test.js
@@ -0,0 +1,19 @@
+// For authoring Nightwatch tests, see
+// http://nightwatchjs.org/guide#usage
+
+module.exports = {
+ 'default e2e tests': function (browser) {
+ // automatically uses dev Server port from /config.index.js
+ // default: http://localhost:8080
+ // see nightwatch.conf.js
+ const devServer = browser.globals.devServerURL
+
+ browser
+ .url(devServer)
+ .waitForElementVisible('#app', 5000)
+ .assert.elementPresent('.hello')
+ .assert.containsText('h1', 'Welcome to Your Vue.js App')
+ .assert.elementCount('img', 1)
+ .end()
+ }
+}
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')
+ })
+})