Translations: Français
-
npm i --save-dev require-extension-hooks require-extension-hooks-vue require-extension-hooks-babel@beta
-
npm i --save-dev jsdom jsdom-global
-
Optional: babel-plugin-webpack-alias-7 if you want to use webpack aliases or use them in your source files
npm i --save-dev babel-plugin-webpack-alias-7
The first step is setting up a helper to configure the environment to transpile .vue
files and run in a browser like environment.
package.json
:
{
"ava": {
"require": [
"./test/_setup.js"
]
}
}
// ./test/_setup.cjs
// Set up JSDom.
const jsdomGlobal = require('jsdom-global');
jsdomGlobal();
// Fix the Date object, see <https://github.com/vuejs/vue-test-utils/issues/936#issuecomment-415386167>.
window.Date = Date
// Setup browser environment
const hooks = require('require-extension-hooks');
const Vue = require('vue');
// Setup Vue.js to remove production tip
Vue.config.productionTip = false;
// Setup vue files to be processed by `require-extension-hooks-vue`
hooks('vue').plugin('vue').push();
// Setup vue and js files to be processed by `require-extension-hooks-babel`
hooks(['vue', 'js']).exclude(({filename}) => filename.match(/\/node_modules\//)).plugin('babel').push();
Note: If you are using babel-plugin-webpack-alias-7, you must also exclude your webpack file - e.g. filename.includes(/\/node_modules\//) || filename.includes('webpack.config.test.js')
const test = require('ava');
const Vue = require('vue');
const Component = require('component.vue');
test('renders', t => {
const vm = new Vue(Component).$mount();
const tree = {
$el: vm.$el.outerHTML
};
t.snapshot(tree);
});
Follow the coverage reporting recipe, additionally adding the .vue
extension to the c8
config to instrument .vue
files.
{
"c8": {
"extension": [
".js",
".vue"
]
}
}