Skip to content

Commit 63d47aa

Browse files
committed
test: unit test for fieldGoogleAddress
1 parent 0b65bdb commit 63d47aa

File tree

3 files changed

+146
-46
lines changed

3 files changed

+146
-46
lines changed

src/fields/fieldGoogleAddress.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
2424
//google inputs retrieved
2525
"inputs": {
26-
"street_number": "long_name",
26+
street_number: "long_name",
2727
route: "long_name",
2828
country: "long_name",
2929
administrative_area_level_1: "long_name",
@@ -89,7 +89,7 @@
8989
lng: position.coords.longitude
9090
};
9191
92-
let circle = new google.maps.Circle({
92+
let circle = new window.google.maps.Circle({
9393
center: geolocation,
9494
radius: position.coords.accuracy
9595
});

test/unit/karma.conf.js

+45-44
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,65 @@
11
var wsConfig = require("./webpack.test.config");
22

33
module.exports = function(config) {
4-
var settings = {
5-
// base path that will be used to resolve all patterns (eg. files, exclude)
6-
basePath: "",
4+
var settings = {
5+
// base path that will be used to resolve all patterns (eg. files, exclude)
6+
basePath: "",
77

8-
browsers: ["PhantomJS"],
8+
browsers: ["PhantomJS"],
99

10-
reporters: ["spec", "coverage"],
10+
reporters: ["spec", "coverage"],
1111

12-
frameworks: ["mocha", "chai", "sinon-chai"],
12+
frameworks: ["mocha", "chai", "sinon-chai"],
1313

14-
files: [
15-
"https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.js",
16-
"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js",
17-
"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.js",
18-
"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js",
19-
"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js",
20-
"https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectrum.js",
21-
"https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.js",
22-
"https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/js/ion.rangeSlider.js",
23-
"https://rawgit.com/monterail/vue-multiselect/master/lib/vue-multiselect.min.js",
24-
"https://rawgit.com/nosir/cleave.js/master/dist/cleave.min.js",
25-
"https://nosir.github.io/cleave.js/lib/cleave-phone.i18n.js",
26-
"https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/8.5.1/nouislider.js",
27-
"https://cdnjs.cloudflare.com/ajax/libs/pikaday/1.4.0/pikaday.min.js",
14+
files: [
15+
"https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.js",
16+
"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js",
17+
"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.js",
18+
"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js",
19+
"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js",
20+
"https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectrum.js",
21+
"https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.js",
22+
"https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/js/ion.rangeSlider.js",
23+
"https://rawgit.com/monterail/vue-multiselect/master/lib/vue-multiselect.min.js",
24+
"https://rawgit.com/nosir/cleave.js/master/dist/cleave.min.js",
25+
"https://nosir.github.io/cleave.js/lib/cleave-phone.i18n.js",
26+
"https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/8.5.1/nouislider.js",
27+
"https://cdnjs.cloudflare.com/ajax/libs/pikaday/1.4.0/pikaday.min.js",
28+
"https://maps.googleapis.com/maps/api/js?key=AIzaSyCEz-sX9bRJorDS-D_JL0JkZVZe2gzoUMw&libraries=places",
2829

29-
"./index.js"
30-
],
30+
"./index.js"
31+
],
3132

32-
exclude: [],
33+
exclude: [],
3334

34-
preprocessors: {
35-
"./index.js": ["webpack", "sourcemap"]
36-
},
35+
preprocessors: {
36+
"./index.js": ["webpack", "sourcemap"]
37+
},
3738

38-
webpack: wsConfig,
39+
webpack: wsConfig,
3940

40-
webpackMiddleware: {
41-
noInfo: true
42-
},
41+
webpackMiddleware: {
42+
noInfo: true
43+
},
4344

44-
port: 9876,
45+
port: 9876,
4546

46-
colors: true,
47+
colors: true,
4748

48-
logLevel: config.LOG_INFO,
49+
logLevel: config.LOG_INFO,
4950

50-
autoWatch: false,
51+
autoWatch: false,
5152

52-
singleRun: true,
53+
singleRun: true,
5354

54-
coverageReporter: {
55-
dir: "./coverage",
56-
reporters: [
57-
{ type: "lcov", subdir: "." },
58-
{ type: "text-summary" }
59-
]
60-
}
61-
}
55+
coverageReporter: {
56+
dir: "./coverage",
57+
reporters: [
58+
{ type: "lcov", subdir: "." },
59+
{ type: "text-summary" }
60+
]
61+
}
62+
}
6263

63-
config.set(settings);
64+
config.set(settings);
6465
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import { expect } from "chai";
2+
import { createVueField, trigger } from "../util";
3+
4+
import Vue from "vue";
5+
import FieldGoogleAddress from "src/fields/fieldGoogleAddress.vue";
6+
7+
Vue.component("FieldGoogleAddress", FieldGoogleAddress);
8+
9+
let el, vm, field;
10+
11+
function createField(schema = {}, model = null, disabled = false, options) {
12+
[ el, vm, field ] = createVueField("fieldGoogleAddress", schema, model, disabled, options);
13+
}
14+
15+
describe("fieldGoogleAddress.vue", () => {
16+
17+
describe("check template", () => {
18+
let schema = {
19+
type: "text",
20+
label: "Address",
21+
model: "address",
22+
readonly: false,
23+
placeholder: "Field placeholder"
24+
};
25+
let model = { address: "Paris, France" };
26+
let input;
27+
28+
before( () => {
29+
createField(schema, model, false);
30+
input = el.getElementsByTagName("input")[0];
31+
});
32+
33+
it("should contain an input text element", () => {
34+
expect(field).to.be.exist;
35+
expect(field.$el).to.be.exist;
36+
37+
expect(input).to.be.defined;
38+
expect(input.type).to.be.equal("text");
39+
expect(input.classList.contains("form-control")).to.be.true;
40+
expect(input.placeholder).to.be.equal(schema.placeholder);
41+
expect(input.readOnly).to.be.false;
42+
expect(input.disabled).to.be.false;
43+
});
44+
45+
it("should contain the value", (done) => {
46+
vm.$nextTick( () => {
47+
expect(input.value).to.be.equal("Paris, France");
48+
done();
49+
});
50+
});
51+
52+
it("should set readOnly", (done) => {
53+
schema.readonly = true;
54+
vm.$nextTick( () => {
55+
expect(input.readOnly).to.be.true;
56+
schema.readonly = false;
57+
done();
58+
});
59+
});
60+
61+
it("should set disabled", (done) => {
62+
field.disabled = true;
63+
vm.$nextTick( () => {
64+
expect(input.disabled).to.be.true;
65+
field.disabled = false;
66+
done();
67+
});
68+
});
69+
70+
it("input value should be the model value after changed", (done) => {
71+
model.address = "Rome, Italy";
72+
vm.$nextTick( () => {
73+
expect(input.value).to.be.equal("Rome, Italy");
74+
done();
75+
});
76+
77+
});
78+
79+
it("model value should be the input value if changed", (done) => {
80+
input.value = "Budapest, Hungary";
81+
trigger(input, "change");
82+
83+
vm.$nextTick( () => {
84+
expect(model.address).to.be.equal("Budapest, Hungary");
85+
done();
86+
});
87+
88+
});
89+
90+
/*
91+
TODO:
92+
1. check HTML list if typing
93+
2. check geolocate called if input got focus
94+
3. check onPlaceChanged called
95+
*/
96+
97+
});
98+
99+
});

0 commit comments

Comments
 (0)