Skip to content

Commit 51ddbd2

Browse files
committed
developing
1 parent 3e1a339 commit 51ddbd2

File tree

2 files changed

+123
-51
lines changed

2 files changed

+123
-51
lines changed

tests/unit/specs/__snapshots__/ve-table-contextmenu.spec.js.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ exports[`veTable contextmenu render 1`] = `
6767
<tfoot class="ve-table-fixed-footer ve-table-footer"></tfoot>
6868
</table>
6969
</div>
70-
<div class="ve-contextmenu" style="display: none;" on="[object Object]">
70+
<div class="ve-contextmenu" style="display: none;">
7171
<div class="ve-contextmenu-panel">
7272
<ul class="ve-contextmenu-list">
7373
<li class="ve-contextmenu-node"><span class="ve-contextmenu-node-label">insert row above</span></li>

tests/unit/specs/ve-table-contextmenu.spec.js

Lines changed: 122 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { mount } from "@vue/test-utils";
22
import veTable from "@/ve-table";
33
import { later } from "../util";
4+
import { cloneDeep } from "lodash";
45

56
describe("veTable contextmenu", () => {
67
const TABLE_DATA = [
@@ -100,6 +101,17 @@ describe("veTable contextmenu", () => {
100101
},
101102
];
102103

104+
afterEach(() => {
105+
return new Promise((resolve) => {
106+
const contextmenuPopper = document.querySelector(
107+
".ve-contextmenu-popper",
108+
);
109+
contextmenuPopper && contextmenuPopper.remove();
110+
111+
resolve();
112+
});
113+
});
114+
103115
it("render", () => {
104116
const wrapper = mount(veTable, {
105117
propsData: {
@@ -119,50 +131,120 @@ describe("veTable contextmenu", () => {
119131
expect(wrapper.html()).toMatchSnapshot();
120132
});
121133

122-
const mockFn = jest.fn();
134+
it("contextmenu INSERT_ROW_ABOVE", async () => {
135+
const mockFn = jest.fn();
123136

124-
const WRAPPER = mount(
125-
{
126-
render() {
127-
return (
128-
<div>
129-
<ve-table
130-
row-key-field-name="rowKey"
131-
columns={COLUMNS}
132-
table-data={TABLE_DATA}
133-
contextmenu-body-option={this.contextmenuBodyOption}
134-
/>
135-
</div>
136-
);
137-
},
138-
data() {
139-
return {
140-
contextmenuBodyOption: {
141-
callback: ({ type, selection }) => {
142-
console.log(11111111111111);
143-
mockFn({ type, selection });
137+
let tableData = cloneDeep(TABLE_DATA);
138+
139+
const WRAPPER = mount(
140+
{
141+
render() {
142+
return (
143+
<div>
144+
<ve-table
145+
row-key-field-name="rowKey"
146+
columns={COLUMNS}
147+
table-data={tableData}
148+
contextmenu-body-option={
149+
this.contextmenuBodyOption
150+
}
151+
/>
152+
</div>
153+
);
154+
},
155+
data() {
156+
return {
157+
contextmenuBodyOption: {
158+
callback: ({ type, selection }) => {
159+
mockFn({ type, selection });
160+
},
161+
contextmenus: CONTEXTMENUS,
144162
},
145-
contextmenus: CONTEXTMENUS,
146-
},
147-
};
163+
};
164+
},
148165
},
149-
},
150-
// need attach to documnet
151-
{ attachTo: document.body },
152-
);
166+
// need attach to documnet
167+
{ attachTo: document.body },
168+
);
169+
170+
const firstTrTdEl = WRAPPER.findAll(".ve-table-body-tr")
171+
.at(2)
172+
.findAll(".ve-table-body-td")
173+
.at(2);
174+
175+
firstTrTdEl.trigger("click");
176+
177+
await later();
178+
179+
expect(firstTrTdEl.classes()).toContain("ve-table-cell-selection");
180+
181+
const bodyEl = WRAPPER.find(".ve-table-body");
182+
bodyEl.trigger("contextmenu");
183+
184+
await later();
185+
186+
const contextmenuPopper = document.querySelector(
187+
".ve-contextmenu-popper",
188+
);
153189

154-
it("callback event", async () => {
155-
/* const tdEl = document.querySelector(
156-
".ve-table-body tr[row-key='2'] td[col-key='number']",
190+
const contextmenuNodes = contextmenuPopper.querySelectorAll(
191+
".ve-contextmenu-node",
157192
);
158193

159-
const clickEvent = new MouseEvent("click", {
194+
const event2 = new MouseEvent("click", {
160195
view: window, // window
161196
bubbles: true,
162197
cancelable: true,
163198
});
164199

165-
tdEl.dispatchEvent(clickEvent); */
200+
contextmenuNodes[0].dispatchEvent(event2);
201+
202+
await later();
203+
204+
expect(tableData.length).toBe(6);
205+
206+
expect(mockFn).toHaveBeenCalled();
207+
expect(mockFn).toHaveBeenCalledWith({
208+
selection: { colKey: "date", rowKey: 2 },
209+
type: "INSERT_ROW_ABOVE",
210+
});
211+
});
212+
213+
it("contextmenu INSERT_ROW_BELOW", async () => {
214+
const mockFn = jest.fn();
215+
216+
let tableData = cloneDeep(TABLE_DATA);
217+
218+
const WRAPPER = mount(
219+
{
220+
render() {
221+
return (
222+
<div>
223+
<ve-table
224+
row-key-field-name="rowKey"
225+
columns={COLUMNS}
226+
table-data={tableData}
227+
contextmenu-body-option={
228+
this.contextmenuBodyOption
229+
}
230+
/>
231+
</div>
232+
);
233+
},
234+
data() {
235+
return {
236+
contextmenuBodyOption: {
237+
callback: ({ type, selection }) => {
238+
mockFn({ type, selection });
239+
},
240+
contextmenus: CONTEXTMENUS,
241+
},
242+
};
243+
},
244+
},
245+
// need attach to documnet
246+
{ attachTo: document.body },
247+
);
166248

167249
const firstTrTdEl = WRAPPER.findAll(".ve-table-body-tr")
168250
.at(2)
@@ -175,15 +257,6 @@ describe("veTable contextmenu", () => {
175257

176258
expect(firstTrTdEl.classes()).toContain("ve-table-cell-selection");
177259

178-
/* const bodyEl = document.querySelector(".ve-table-body");
179-
180-
const contextmenuEvent = new MouseEvent("contextmenu", {
181-
view: window, // window
182-
bubbles: true,
183-
cancelable: true,
184-
});
185-
186-
bodyEl.dispatchEvent(contextmenuEvent); */
187260
const bodyEl = WRAPPER.find(".ve-table-body");
188261
bodyEl.trigger("contextmenu");
189262

@@ -203,17 +276,16 @@ describe("veTable contextmenu", () => {
203276
cancelable: true,
204277
});
205278

206-
contextmenuNodes[0].dispatchEvent(event2);
207-
208-
console.log(contextmenuNodes[0].innerHTML);
279+
contextmenuNodes[1].dispatchEvent(event2);
209280

210281
await later();
211282

212-
expect(TABLE_DATA.length).toBe(5);
283+
expect(tableData.length).toBe(6);
213284

214-
// expect(mockFn).toHaveBeenCalled();
215-
// expect(mockFn).toHaveBeenCalledWith("menu1-type");
216-
217-
//expect(mockClickFn).toBeCalledWith(0, expect.any(Object));
285+
expect(mockFn).toHaveBeenCalled();
286+
expect(mockFn).toHaveBeenCalledWith({
287+
selection: { colKey: "date", rowKey: 2 },
288+
type: "INSERT_ROW_BELOW",
289+
});
218290
});
219291
});

0 commit comments

Comments
 (0)