Vue Unit and E2E Test with Code Coverage using Cypress setup example
For Vue-Typescript version please check here
This project example is based on Vue CLI 3.
- 
Create Vue project using Vue CLI vue create your-app cd your-appMake sure to select Cypress as your E2E test 
- 
Add @vue/test-utilsyarn add -D @vue/test-utils
- 
Add @cypress/webpack-preprocessor,find-webpackandbabel-plugin-istanbulyarn add -D @cypress/webpack-preprocessor find-webpack babel-plugin-istanbul
- 
Edit Cypress plugins setting locate at tests/e2e/plugins/index.js4.a. Import webpack-preprocessorconst webpackPreprocessor = require("@cypress/webpack-preprocessor");4.b. Get webpackOptions const fw = require("find-webpack"); const webpackOptions = fw.getWebpackOptions();4.c. Add on file:preprocessorsettingon( "file:preprocessor", webpackPreprocessor({ webpackOptions }) );This setting will allow Cypress to parse .vue files in unit test 4.d. Setup code coverage task require("@cypress/code-coverage/task")(on, config);
- 
Edit Cypress support setting locate at tests/e2e/support/index.jsimport "@cypress/code-coverage/support";
- 
Add istanbulas Babel plugins configplugins: ["istanbul"]
- 
Create .nycrcornycconfig file with following{ "extension": [ ".js", ".vue" ] }
Step 4.d, 5 - 7 are related to Code Coverage setup
Vue-CLI by default set test files location in
tests/e2e/specs, but you can customize them incypress.jsonor in plugins settings
//tests/e2e/specs/test.js
describe("My First Test", () => {
    it("Visits the app root url", () => {
        cy.visit("/");
        cy.contains("h1", "Welcome to Your Vue.js App");
    });
});
More detail about Cypress API see Cypress API Docs
//tests/e2e/specs/test.unit.js
import { shallowMount } from "@vue/test-utils";
import HelloWorld from "@/components/HelloWorld.vue";
describe("HelloWorld", () => {
  const msg = "Vue Unit and E2E Test with Cypress";
  it(`Title should display '${msg}'`, () => {
    HelloWorld.components = HelloWorld.components || {};
    let wrapper = shallowMount(HelloWorld, { propsData: { msg } });
    expect(wrapper.find("h1").text()).eq(msg);
  });
  it(`Title should be empty`, () => {
    HelloWorld.components = HelloWorld.components || {};
    let wrapper = shallowMount(HelloWorld, {});
    expect(wrapper.find("h1").text()).to.be.empty;
  });
});
Make sure to put unit test files the same folder as E2E test files and make it available in Cypress UI
Writing unit test usually help to get 100% code coverage
More detail about
@vue/test-utilssee API Docs
yarn test:e2e