Skip to content

Commit bb9410d

Browse files
committed
test: unit test for field slider
1 parent 60a0868 commit bb9410d

File tree

2 files changed

+49
-8
lines changed

2 files changed

+49
-8
lines changed

src/fields/fieldSlider.vue

+20-8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
export default {
1111
mixins: [ abstractField ],
1212
13+
data() {
14+
return {
15+
slider: null
16+
}
17+
},
18+
1319
watch: {
1420
model: function() {
1521
if ($.fn.ionRangeSlider) {
@@ -19,9 +25,8 @@
1925
} else
2026
valueFrom = this.value;
2127
22-
let ionRangeSlider = $(this.$el).data("ionRangeSlider");
23-
if (ionRangeSlider) {
24-
ionRangeSlider.update({
28+
if (this.slider) {
29+
this.slider.update({
2530
from: valueFrom,
2631
to: valueTo
2732
});
@@ -38,24 +43,31 @@
3843
} else
3944
valueFrom = this.value;
4045
46+
let self = this;
4147
$(this.$el).ionRangeSlider(defaults(this.schema.sliderOptions || {}, {
4248
type: "single",
4349
grid: true,
4450
hide_min_max: true,
4551
from: valueFrom,
4652
to: valueTo,
47-
onChange: (slider) => {
48-
if (this.schema.sliderOptions.type == "double") {
49-
this.value = [ slider.from, slider.to ];
53+
onChange(slider) {
54+
if (self.slider.options.type == "double") {
55+
self.value = [ slider.from, slider.to ];
5056
} else {
51-
this.value = slider.from;
57+
self.value = slider.from;
5258
}
5359
}
5460
}));
61+
this.slider = $(this.$el).data("ionRangeSlider");
5562
}
5663
else
5764
console.warn("ion.rangeSlider library is missing. Please download from https://github.com/IonDen/ion.rangeSlider and load the script and CSS in the HTML head section!");
58-
}
65+
},
66+
67+
beforeDestroy() {
68+
if (this.slider)
69+
this.slider.destroy();
70+
}
5971
};
6072
</script>
6173

test/unit/specs/fields/fieldSlider.spec.js

+29
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,43 @@ describe("fieldSlider.vue", () => {
4141
expect(input.getAttribute("data-disable")).to.be.null;
4242
});
4343

44+
it("should contain the value", (done) => {
45+
vm.$nextTick( () => {
46+
let origin = el.querySelector(".irs-slider.single");
47+
expect(origin.style.left).to.be.within("70%", "90%");
48+
done();
49+
});
50+
});
51+
4452
it("should set disabled", (done) => {
4553
field.disabled = true;
4654
vm.$nextTick( () => {
4755
expect(input.getAttribute("data-disable")).to.be.equal("");
56+
field.disabled = false;
57+
done();
58+
});
59+
});
60+
61+
it("input value should be the model value after changed", (done) => {
62+
field.model = { rating: 3 };
63+
vm.$nextTick( () => {
64+
let origin = el.querySelector(".irs-slider.single");
65+
expect(origin.style.left).to.be.within("20%", "40%");
4866
done();
4967
});
68+
5069
});
5170

71+
it("model value should be the input value if changed", (done) => {
72+
field.slider.update({ from: 6 });
73+
field.slider.callOnChange(field.slider); // trigger changes
74+
vm.$nextTick( () => {
75+
expect(field.model.rating).to.be.equal(6);
76+
done();
77+
});
78+
79+
});
80+
5281
});
5382

5483
});

0 commit comments

Comments
 (0)