Skip to content

Commit f5a28e8

Browse files
Improving tests
1 parent 618daa0 commit f5a28e8

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

example/components/nested-example.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import nestedDraggable from "./infra/nested";
1414
export default {
1515
name: "nested-example",
1616
display: "Nested",
17-
order: 19,
17+
order: 14,
1818
components: {
1919
nestedDraggable
2020
},

tests/unit/vuedraggable.spec.js

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,18 @@ let props;
1515
let items;
1616
let element;
1717
let input;
18+
const initialRender = "<div><header></header><div>a</div><div>b</div><div>c</div><footer></footer></div>";
19+
20+
function getEvent(name) {
21+
return Sortable.mock.calls[0][1][name];
22+
}
1823

1924
describe("draggable.vue", () => {
2025
beforeEach(() => {
2126
Sortable.mockClear();
2227
items = ["a", "b", "c"];
2328
wrapper = shallowMount(draggable, {
29+
attachToDocument: true,
2430
propsData: {
2531
list: items
2632
},
@@ -110,6 +116,10 @@ describe("draggable.vue", () => {
110116
expect(wrapper.html()).toContain("<div>a</div><div>b</div><div>c</div>");
111117
})
112118

119+
it("renders correctly", () => {
120+
expect(wrapper.html()).toEqual(initialRender);
121+
})
122+
113123
test.each([
114124
"ul",
115125
"span",
@@ -189,7 +199,7 @@ describe("draggable.vue", () => {
189199
)(
190200
"when event %s is emitted from sortable",
191201
async (evt, vueEvt) => {
192-
const callBack = Sortable.mock.calls[0][1][evt];
202+
const callBack = getEvent(evt);
193203
const evtInfo = {
194204
data: {}
195205
};
@@ -200,4 +210,63 @@ describe("draggable.vue", () => {
200210
});
201211
}
202212
);
213+
214+
describe("when initiating a drag operation", () => {
215+
let evt;
216+
let item;
217+
beforeEach(() => {
218+
item = element.children[2];
219+
evt = { item };
220+
const start = getEvent("onStart");
221+
start(evt);
222+
});
223+
224+
it("sends a start event", async () => {
225+
await Vue.nextTick();
226+
expect(wrapper.emitted()).toEqual({
227+
start: [[evt]]
228+
});
229+
})
230+
231+
it("sets context", async () => {
232+
await Vue.nextTick();
233+
expect(vm.context).toEqual({
234+
element: "b",
235+
index: 1
236+
});
237+
})
238+
239+
describe("when remove is called", () => {
240+
beforeEach(() => {
241+
element.removeChild(item);
242+
const remove = getEvent("onRemove");
243+
remove({
244+
item,
245+
oldIndex: 2
246+
});
247+
})
248+
249+
it("DOM changes should be reverted", async () => {
250+
await Vue.nextTick();
251+
expect(wrapper.html()).toEqual(initialRender);
252+
})
253+
254+
it("list should be updated", async () => {
255+
await Vue.nextTick();
256+
expect(vm.list).toEqual(["a", "c"]);
257+
})
258+
259+
it("sends a remove event", async () => {
260+
await Vue.nextTick();
261+
const expectedEvt = { item, oldIndex: 2 };
262+
expect(wrapper.emitted().remove).toEqual([[expectedEvt]]);
263+
})
264+
265+
it("sends a change event", async () => {
266+
await Vue.nextTick();
267+
const expectedEvt = { removed: { element: "b", oldIndex: 1 } };
268+
expect(wrapper.emitted().change).toEqual([[expectedEvt]]);
269+
})
270+
})
271+
});
203272
});

0 commit comments

Comments
 (0)