mirror of
https://github.com/tenrok/vue-select.git
synced 2026-05-20 03:09:36 +03:00
164 lines
5.4 KiB
JavaScript
Executable File
164 lines
5.4 KiB
JavaScript
Executable File
import { mount, shallowMount } from "@vue/test-utils";
|
|
import VueSelect from "../../src/components/Select";
|
|
import { mountDefault } from "../helpers";
|
|
|
|
describe("Reset on options change", () => {
|
|
it("should not reset the selected value by default when the options property changes", () => {
|
|
const Select = shallowMount(VueSelect, {
|
|
propsData: { options: ["one"] }
|
|
});
|
|
|
|
Select.vm.$data._value = "one";
|
|
|
|
Select.setProps({ options: ["four", "five", "six"] });
|
|
expect(Select.vm.selectedValue).toEqual(["one"]);
|
|
});
|
|
|
|
describe("resetOnOptionsChange as a function", () => {
|
|
it("will yell at you if resetOnOptionsChange is not a function or boolean", () => {
|
|
const spy = jest.spyOn(console, "error").mockImplementation(() => {});
|
|
|
|
mountDefault({ resetOnOptionsChange: 1 });
|
|
expect(spy.mock.calls[0][0]).toContain(
|
|
'Invalid prop: custom validator check failed for prop "resetOnOptionsChange"'
|
|
);
|
|
|
|
mountDefault({ resetOnOptionsChange: "one" });
|
|
expect(spy.mock.calls[1][0]).toContain(
|
|
'Invalid prop: custom validator check failed for prop "resetOnOptionsChange"'
|
|
);
|
|
|
|
mountDefault({ resetOnOptionsChange: [] });
|
|
expect(spy.mock.calls[2][0]).toContain(
|
|
'Invalid prop: custom validator check failed for prop "resetOnOptionsChange"'
|
|
);
|
|
|
|
mountDefault({ resetOnOptionsChange: {} });
|
|
expect(spy.mock.calls[3][0]).toContain(
|
|
'Invalid prop: custom validator check failed for prop "resetOnOptionsChange"'
|
|
);
|
|
});
|
|
|
|
it("should receive the new options, old options, and current value", async () => {
|
|
let resetOnOptionsChange = jest.fn(option => option);
|
|
const Select = mountDefault({
|
|
resetOnOptionsChange,
|
|
options: ["bear"],
|
|
value: "selected"
|
|
});
|
|
|
|
Select.setProps({ options: ["lake", "kite"] });
|
|
await Select.vm.$nextTick();
|
|
|
|
expect(resetOnOptionsChange).toHaveBeenCalledTimes(1);
|
|
expect(resetOnOptionsChange).toHaveBeenCalledWith(
|
|
["lake", "kite"],
|
|
["bear"],
|
|
["selected"]
|
|
);
|
|
});
|
|
|
|
it("should allow resetOnOptionsChange to be a function that returns true", async () => {
|
|
let resetOnOptionsChange = () => true;
|
|
const Select = shallowMount(VueSelect, {
|
|
propsData: { resetOnOptionsChange, options: ["one"], value: "one" }
|
|
});
|
|
const spy = jest.spyOn(Select.vm, "clearSelection");
|
|
|
|
Select.setProps({ options: ["one", "two"] });
|
|
await Select.vm.$nextTick();
|
|
|
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("should allow resetOnOptionsChange to be a function that returns false", () => {
|
|
let resetOnOptionsChange = () => false;
|
|
const Select = shallowMount(VueSelect, {
|
|
propsData: { resetOnOptionsChange, options: ["one"], value: "one" }
|
|
});
|
|
const spy = jest.spyOn(Select.vm, "clearSelection");
|
|
|
|
Select.setProps({ options: ["one", "two"] });
|
|
expect(spy).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should reset the options if the selectedValue does not exist in the new options", async () => {
|
|
let resetOnOptionsChange = (options, old, val) =>
|
|
val.some(val => options.includes(val));
|
|
const Select = shallowMount(VueSelect, {
|
|
propsData: { resetOnOptionsChange, options: ["one"], value: "one" }
|
|
});
|
|
const spy = jest.spyOn(Select.vm, "clearSelection");
|
|
|
|
Select.setProps({ options: ["one", "two"] });
|
|
await Select.vm.$nextTick();
|
|
|
|
expect(Select.vm.selectedValue).toEqual(["one"]);
|
|
|
|
Select.setProps({ options: ["two"] });
|
|
await Select.vm.$nextTick();
|
|
|
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|
|
|
|
it("should reset the selected value when the options property changes", async () => {
|
|
const Select = shallowMount(VueSelect, {
|
|
propsData: { resetOnOptionsChange: true, options: ["one"] }
|
|
});
|
|
|
|
Select.vm.$data._value = "one";
|
|
|
|
Select.setProps({ options: ["four", "five", "six"] });
|
|
await Select.vm.$nextTick();
|
|
|
|
expect(Select.vm.selectedValue).toEqual([]);
|
|
});
|
|
|
|
it("should return correct selected value when the options property changes and a new option matches", async () => {
|
|
const Select = shallowMount(VueSelect, {
|
|
propsData: {
|
|
value: "one",
|
|
options: [],
|
|
reduce(option) {
|
|
return option.value;
|
|
}
|
|
}
|
|
});
|
|
|
|
Select.setProps({ options: [{ label: "oneLabel", value: "one" }] });
|
|
await Select.vm.$nextTick();
|
|
|
|
expect(Select.vm.selectedValue).toEqual([
|
|
{ label: "oneLabel", value: "one" }
|
|
]);
|
|
});
|
|
|
|
it("clearSearchOnBlur returns false when multiple is true", () => {
|
|
const Select = mountDefault({});
|
|
let clearSearchOnBlur = jest.spyOn(Select.vm, "clearSearchOnBlur");
|
|
Select.find({ ref: "search" }).trigger("click");
|
|
Select.setData({ search: "one" });
|
|
Select.find({ ref: "search" }).trigger("blur");
|
|
|
|
expect(clearSearchOnBlur).toHaveBeenCalledTimes(1);
|
|
expect(clearSearchOnBlur).toHaveBeenCalledWith({
|
|
clearSearchOnSelect: true,
|
|
multiple: false
|
|
});
|
|
expect(Select.vm.search).toBe("");
|
|
});
|
|
|
|
it("clearSearchOnBlur accepts a function", () => {
|
|
let clearSearchOnBlur = jest.fn(() => false);
|
|
const Select = mountDefault({ clearSearchOnBlur });
|
|
|
|
Select.find({ ref: "search" }).trigger("click");
|
|
Select.setData({ search: "one" });
|
|
Select.find({ ref: "search" }).trigger("blur");
|
|
|
|
expect(clearSearchOnBlur).toHaveBeenCalledTimes(1);
|
|
expect(Select.vm.search).toBe("one");
|
|
});
|
|
});
|