Skip to content

Commit 8446825

Browse files
Adding integrated tests
1 parent f35495b commit 8446825

File tree

4 files changed

+104
-49
lines changed

4 files changed

+104
-49
lines changed

tests/unit/helper/DraggableWithList.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<draggable :list="array">
2+
<draggable :list="array" tag="span">
33
<div
44
v-for="item in array"
55
:key="item"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<template>
2+
<draggable v-model="array" tag="span">
3+
<div
4+
v-for="item in array"
5+
:key="item"
6+
>{{item}}</div>
7+
</draggable>
8+
</template>
9+
<script>
10+
import draggable from "@/vuedraggable";
11+
12+
export default {
13+
components: {
14+
draggable
15+
},
16+
data() {
17+
return {
18+
array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
19+
};
20+
}
21+
};
22+
</script>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<template>
2+
<draggable v-model="array">
3+
<transition-group>
4+
<div
5+
v-for="item in array"
6+
:key="item"
7+
>{{item}}</div>
8+
</transition-group>
9+
</draggable>
10+
</template>
11+
<script>
12+
import draggable from "@/vuedraggable";
13+
14+
export default {
15+
components: {
16+
draggable
17+
},
18+
data() {
19+
return {
20+
array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
21+
};
22+
}
23+
};
24+
</script>

tests/unit/vuedraggable.integrated.spec.js

Lines changed: 57 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ const SortableFake = {
66
destroy: jest.fn(),
77
option: jest.fn()
88
};
9-
const SortableFake2 = {
10-
destroy: jest.fn(),
11-
option: jest.fn()
12-
};
13-
Sortable.mockImplementationOnce(() => SortableFake)
14-
.mockImplementationOnce(() => SortableFake2);
9+
Sortable.mockImplementation(() => SortableFake);
1510

1611
import Vue from "vue";
1712
import DraggableWithList from "./helper/DraggableWithList"
13+
import DraggableWithModel from "./helper/DraggableWithList"
14+
import DraggableWithTransition from "./helper/DraggableWithTransition"
15+
1816
import draggable from "@/vuedraggable";
1917

2018
let wrapper;
@@ -25,51 +23,62 @@ function getEvent(name) {
2523
return Sortable.mock.calls[0][1][name];
2624
}
2725

28-
describe("draggable.vue when working list", () => {
29-
beforeEach(() => {
30-
jest.resetAllMocks();
31-
wrapper = mount(DraggableWithList, {
32-
attachToDocument: true
33-
});
34-
vm = wrapper.vm;
35-
element = wrapper.element;
36-
});
37-
38-
describe("when handling sort", () => {
39-
let item;
26+
const expectedArray = [0, 1, 3, 4, 5, 6, 7, 2, 8, 9];
27+
const expectedDomNoTransition = `<span>${expectedArray.map(nu => `<div>${nu}</div>`).join('')}</span>`;
28+
const expectedDomTransition = `<div>${expectedDomNoTransition}</div>`;
4029

41-
beforeEach(async () => {
42-
item = element.children[2];
43-
const startEvt = { item };
44-
getEvent("onStart")(startEvt);
45-
await Vue.nextTick();
30+
describe.each([
31+
[DraggableWithList, "draggable with list", expectedDomNoTransition],
32+
[DraggableWithModel, "draggable with model", expectedDomNoTransition],
33+
[DraggableWithTransition, "draggable with transition", expectedDomTransition]
34+
])
35+
(
36+
"should update list with component: %s %s",
37+
(component, _, expectedDom) => {
4638

47-
const firstDraggable = element.children[1];
48-
element.removeChild(item);
49-
element.insertBefore(item, firstDraggable);
50-
getEvent("onUpdate")({
51-
item,
52-
oldIndex: 2,
53-
newIndex: 7,
54-
from: element
39+
beforeEach(() => {
40+
jest.resetAllMocks();
41+
wrapper = mount(component, {
42+
attachToDocument: true
43+
});
44+
vm = wrapper.vm;
45+
element = wrapper.find('span').element;
5546
});
56-
await Vue.nextTick();
57-
})
5847

59-
it("sends a change event", async () => {
60-
const draggableWrapper = wrapper.find(draggable);
61-
const expectedEvt = { moved: { element: 2, oldIndex: 2, newIndex: 7 } };
62-
expect(draggableWrapper.emitted().change).toEqual([[expectedEvt]]);
63-
});
48+
describe("when handling sort", () => {
49+
let item;
6450

65-
it("update list", async () => {
66-
expect(wrapper.vm.array).toEqual([0, 1, 3, 4, 5, 6, 7, 2, 8, 9]);
67-
});
51+
beforeEach(async () => {
52+
item = element.children[2];
53+
const startEvt = { item };
54+
getEvent("onStart")(startEvt);
55+
await Vue.nextTick();
6856

69-
it("updates DOM", async () => {
70-
const expectedArray = [0, 1, 3, 4, 5, 6, 7, 2, 8, 9];
71-
const expectedDom = `<div>${expectedArray.map(nu => `<div>${nu}</div>`).join('')}</div>`;
72-
expect(wrapper.html()).toEqual(expectedDom);
73-
});
74-
});
75-
});
57+
const firstDraggable = element.children[1];
58+
element.removeChild(item);
59+
element.insertBefore(item, firstDraggable);
60+
getEvent("onUpdate")({
61+
item,
62+
oldIndex: 2,
63+
newIndex: 7,
64+
from: element
65+
});
66+
await Vue.nextTick();
67+
})
68+
69+
it("sends a change event", async () => {
70+
const draggableWrapper = wrapper.find(draggable);
71+
const expectedEvt = { moved: { element: 2, oldIndex: 2, newIndex: 7 } };
72+
expect(draggableWrapper.emitted().change).toEqual([[expectedEvt]]);
73+
});
74+
75+
it("update list", async () => {
76+
expect(vm.array).toEqual(expectedArray);
77+
});
78+
79+
it("updates DOM", async () => {
80+
expect(wrapper.html()).toEqual(expectedDom);
81+
});
82+
});
83+
}
84+
)

0 commit comments

Comments
 (0)