Skip to content

Commit bf9ba54

Browse files
committed
finish countdown component
1 parent ba0edff commit bf9ba54

File tree

5 files changed

+106
-36
lines changed

5 files changed

+106
-36
lines changed

.babelrc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
{
2+
"plugins": [
3+
["transform-runtime", {
4+
"regenerator": true
5+
}]
6+
],
27
"presets": [
38
["env", { "modules": false }],
49
"stage-3"

package-lock.json

Lines changed: 70 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"watch": "mocha-webpack --webpack-config webpack.config.js --watch --require test/setup.js test/**/*.spec.js"
1313
},
1414
"dependencies": {
15+
"@babel/runtime": "^7.7.2",
1516
"axios": "^0.19.0",
1617
"moment": "^2.24.0",
1718
"moxios": "^0.4.0",
@@ -23,9 +24,11 @@
2324
"not ie <= 8"
2425
],
2526
"devDependencies": {
27+
"@babel/plugin-transform-runtime": "^7.6.2",
2628
"@vue/test-utils": "^1.0.0-beta.29",
2729
"babel-core": "^6.26.0",
2830
"babel-loader": "^7.1.2",
31+
"babel-plugin-transform-runtime": "^6.23.0",
2932
"babel-preset-env": "^1.6.0",
3033
"babel-preset-stage-3": "^6.24.1",
3134
"cross-env": "^5.0.5",

src/components/Countdown.vue

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
expiredText: { default: 'Now Expired' }
2121
},
2222
data () {
23-
return { now: new Date() };
23+
return { now: new Date(), interval: null };
2424
},
2525
2626
computed: {
@@ -36,10 +36,14 @@
3636
}
3737
},
3838
created () {
39-
let interval = setInterval(() => {
39+
this.interval = setInterval(() => {
4040
this.now = new Date();
4141
}, 1000);
42-
this.$on('finished', () => clearInterval(interval));
42+
this.$on('finished', () => clearInterval(this.interval));
43+
},
44+
45+
destroyed() {
46+
clearInterval(this.interval);
4347
}
4448
}
4549
</script>

test/Countdown.spec.js

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,52 +26,52 @@ describe('Countdown', () => {
2626
see('10 Seconds');
2727
});
2828

29-
it('reduces the countdown every second', (done) => {
29+
it('reduces the countdown every second', async () => {
3030
see('10 Seconds');
3131

3232
clock.tick(1000);
3333

34-
assertOnNextTick(() => {
35-
see('9 Seconds');
36-
}, done);
34+
await wrapper.vm.$nextTick();
35+
36+
see('9 Seconds');
3737
});
3838

39-
it('shows an expired message when the countdown has completed', (done) => {
39+
it('shows an expired message when the countdown has completed', async () => {
4040
clock.tick(10000);
4141

42-
assertOnNextTick(() => {
43-
see('Now Expired');
44-
}, done);
42+
await wrapper.vm.$nextTick();
43+
44+
see('Now Expired');
4545
});
4646

47-
it('shows a custom expired message when the countdown has completed', (done) => {
47+
it('shows a custom expired message when the countdown has completed', async () => {
4848
wrapper.setProps({expiredText: 'Contest is over.'});
4949

5050
clock.tick(10000);
5151

52-
assertOnNextTick(() => {
53-
see('Contest is over.');
54-
}, done);
52+
await wrapper.vm.$nextTick();
53+
54+
see('Contest is over.');
5555
});
5656

57-
it('broadcasts when the countdown is finished', (done) => {
57+
it('broadcasts when the countdown is finished', async () => {
5858
clock.tick(10000);
5959

60-
assertOnNextTick(() => {
61-
expect(wrapper.emitted().finished).toBeTruthy();
62-
}, done);
60+
await wrapper.vm.$nextTick();
61+
62+
expect(wrapper.emitted().finished).toBeTruthy();
6363
});
6464

65-
it('clears the interval once completed', (done) => {
65+
it('clears the interval once completed', async () => {
6666
clock.tick(10000);
6767

6868
expect(wrapper.vm.now.getSeconds()).toBe(10);
6969

70-
assertOnNextTick(() => {
71-
clock.tick(5000);
70+
await wrapper.vm.$nextTick();
71+
72+
clock.tick(5000);
7273

73-
expect(wrapper.vm.now.getSeconds()).toBe(10);
74-
}, done);
74+
expect(wrapper.vm.now.getSeconds()).toBe(10);
7575
});
7676

7777
// Helper Functions
@@ -92,16 +92,4 @@ describe('Countdown', () => {
9292
let click = selector => {
9393
wrapper.find(selector).trigger('click');
9494
};
95-
96-
let assertOnNextTick = (callback, done) => {
97-
wrapper.vm.$nextTick(() => {
98-
try {
99-
callback();
100-
101-
done();
102-
} catch (e) {
103-
done(e);
104-
}
105-
});
106-
};
10795
});

0 commit comments

Comments
 (0)