-
Notifications
You must be signed in to change notification settings - Fork 0
/
router.spec.js
85 lines (77 loc) · 2.24 KB
/
router.spec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import Vue from "vue";
import VueRouter from "vue-router";
import { createLocalVue, mount } from "@vue/test-utils";
const chai = require("chai");
const expect = chai.expect;
describe("router.push", () => {
it("calls beforeMount only once", async () => {
let countBeforeMountCalled = 0;
const localVue = createLocalVue();
localVue.use(VueRouter);
const routes = [
{
path: "/",
component: {
render: h => h("div", "home")
}
},
{
path: "/user/:id",
// It works, if we don't use Vue.extend.
// component: {
component: Vue.extend({
// Component with children, nested router-view.
render: function (h) {
return h("router-view");
},
beforeMount: function () {
countBeforeMountCalled += 1;
console.log("[!] beforeMount Parent");
},
beforeRouteUpdate: function (to, from, next) {
console.log("beforeRouteUpdate Parent");
next();
}
}),
children: [
{
path: ":post_url_slug",
component: Vue.extend({
render: function (h) {
return h("div", "Post Page");
},
beforeMount: function () {
console.log("beforeMount Nested");
},
beforeRouteUpdate: function (to, from, next) {
console.log("beforeRouteUpdate Nested");
next();
}
})
}
]
}
];
const router = new VueRouter({
routes
});
const wrapper = mount(
{
template: `<div><router-view></router-view></div>`,
beforeMount: function () {
console.log("beforeMount App");
}
},
{ localVue, router }
);
expect(wrapper.vm.$route).to.be.an("object");
expect(wrapper.text()).to.contain("home");
router.push({ path: "/user/1/post1" });
await wrapper.vm.$nextTick();
expect(wrapper.text()).to.contain("Post Page");
router.push({ path: "/user/1/post2" });
await wrapper.vm.$nextTick();
expect(wrapper.text()).to.contain("Post Page");
expect(countBeforeMountCalled).to.equal(1);
});
});