diff --git a/src/count-down/test/__snapshots__/demo.spec.js.snap b/src/count-down/test/__snapshots__/demo.spec.js.snap
deleted file mode 100644
index 237f2ee09..000000000
--- a/src/count-down/test/__snapshots__/demo.spec.js.snap
+++ /dev/null
@@ -1,35 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renders demo correctly 1`] = `
-
-`;
diff --git a/src/count-down/test/__snapshots__/index.spec.js.snap b/src/count-down/test/__snapshots__/index.spec.js.snap
new file mode 100644
index 000000000..6a6dc9335
--- /dev/null
+++ b/src/count-down/test/__snapshots__/index.spec.js.snap
@@ -0,0 +1,7 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`complete format prop 1`] = `01-05-59-59-999
`;
+
+exports[`disable auto-start prop 1`] = `100
`;
+
+exports[`incomplate format prop 1`] = `29-59-59-999
`;
diff --git a/src/count-down/test/demo.spec.js b/src/count-down/test/demo.spec.js
deleted file mode 100644
index d647cfabc..000000000
--- a/src/count-down/test/demo.spec.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import Demo from '../demo';
-import demoTest from '../../../test/demo-test';
-
-demoTest(Demo);
diff --git a/src/count-down/test/index.spec.js b/src/count-down/test/index.spec.js
new file mode 100644
index 000000000..eb5226990
--- /dev/null
+++ b/src/count-down/test/index.spec.js
@@ -0,0 +1,151 @@
+import CountDown from '..';
+import { mount, later } from '../../../test/utils';
+
+test('macro task finish event', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 1
+ }
+ });
+
+ expect(wrapper.emitted('finish')).toBeFalsy();
+ await later(20);
+ expect(wrapper.emitted('finish')).toBeTruthy();
+});
+
+test('micro task finish event', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 1,
+ millisecond: true
+ }
+ });
+
+ expect(wrapper.emitted('finish')).toBeFalsy();
+ await later(20);
+ expect(wrapper.emitted('finish')).toBeTruthy();
+});
+
+test('macro task re-render', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 1000,
+ format: 'SSS'
+ }
+ });
+
+ const prevSnapShot = wrapper.html();
+ await later(20);
+ const laterSnapShot = wrapper.html();
+
+ expect(prevSnapShot !== laterSnapShot).toBeTruthy();
+});
+
+test('micro task re-render', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 100,
+ format: 'SSS',
+ millisecond: true
+ }
+ });
+
+ const prevSnapShot = wrapper.html();
+ await later(20);
+ const laterSnapShot = wrapper.html();
+
+ expect(prevSnapShot !== laterSnapShot).toBeTruthy();
+});
+
+test('disable auto-start prop', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 100,
+ format: 'SSS',
+ autoStart: false
+ }
+ });
+
+ await later(20);
+ expect(wrapper).toMatchSnapshot();
+});
+
+test('start method', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 100,
+ format: 'SSS',
+ autoStart: false,
+ millisecond: true
+ }
+ });
+
+ const prevSnapShot = wrapper.html();
+
+ wrapper.vm.start();
+ wrapper.vm.start();
+
+ await later(20);
+
+ const laterShapShot = wrapper.html();
+
+ expect(prevSnapShot !== laterShapShot).toBeTruthy();
+});
+
+test('pause method', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 100,
+ format: 'SSS',
+ millisecond: true
+ }
+ });
+
+ const prevSnapShot = wrapper.html();
+ wrapper.vm.pause();
+ await later(20);
+ const laterShapShot = wrapper.html();
+
+ expect(prevSnapShot === laterShapShot).toBeTruthy();
+});
+
+test('reset method', async () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 100,
+ format: 'SSS',
+ millisecond: true
+ }
+ });
+
+ const prevSnapShot = wrapper.html();
+ await later(20);
+ wrapper.vm.reset();
+ const laterShapShot = wrapper.html();
+
+ expect(prevSnapShot === laterShapShot).toBeTruthy();
+});
+
+test('complete format prop', () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 30 * 60 * 60 * 1000 - 1,
+ autoStart: false,
+ format: 'DD-HH-mm-ss-SSS'
+ }
+ });
+
+ expect(wrapper).toMatchSnapshot();
+});
+
+test('incomplate format prop', () => {
+ const wrapper = mount(CountDown, {
+ propsData: {
+ time: 30 * 60 * 60 * 1000 - 1,
+ autoStart: false,
+ format: 'HH-mm-ss-SSS'
+ }
+ });
+
+ expect(wrapper).toMatchSnapshot();
+});