diff --git a/src/list/test/__snapshots__/index.legacy.js.snap b/src/list/test/__snapshots__/index.legacy.js.snap
deleted file mode 100644
index b23d6e241..000000000
--- a/src/list/test/__snapshots__/index.legacy.js.snap
+++ /dev/null
@@ -1,15 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`error slot 1`] = `
-
-`;
-
-exports[`finished slot 1`] = `
-
-`;
diff --git a/src/list/test/__snapshots__/index.spec.js.snap b/src/list/test/__snapshots__/index.spec.js.snap
new file mode 100644
index 000000000..77f465e68
--- /dev/null
+++ b/src/list/test/__snapshots__/index.spec.js.snap
@@ -0,0 +1,27 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should render error slot correctly 1`] = `
+
+`;
+
+exports[`should render finished slot correctly 1`] = `
+
+
+ Custom Finished
+
+
+
+
+`;
diff --git a/src/list/test/index.legacy.js b/src/list/test/index.legacy.js
deleted file mode 100644
index 1e51d0090..000000000
--- a/src/list/test/index.legacy.js
+++ /dev/null
@@ -1,159 +0,0 @@
-import List from '..';
-import { mount, later, mockGetBoundingClientRect } from '../../../test';
-
-test('load event', async () => {
- const wrapper = mount(List);
-
- wrapper.vm.$on('input', (value) => {
- wrapper.vm.loading = value;
- });
-
- await later();
- expect(wrapper.emitted('load')).toBeTruthy();
- expect(wrapper.emitted('input')).toBeTruthy();
-
- wrapper.vm.loading = false;
-
- await later();
- expect(wrapper.emitted('input')[1]).toBeTruthy();
- wrapper.destroy();
-});
-
-test('error loaded, click error-text and reload', async () => {
- const wrapper = mount(List, {
- props: {
- errorText: 'Request failed. Click to reload...',
- error: true,
- },
- });
-
- await later();
-
- expect(wrapper.emitted('load')).toBeFalsy();
- expect(wrapper.emitted('input')).toBeFalsy();
-
- // simulate the behavior of clicking error-text
- wrapper.vm.$on('update:error', (val) => {
- wrapper.setProps({
- error: val,
- });
- });
-
- wrapper.find('.van-list__error-text').trigger('click');
-
- await later();
-
- expect(wrapper.vm.$props.error).toBeFalsy();
- expect(wrapper.emitted('load')).toBeTruthy();
- expect(wrapper.emitted('input')).toBeTruthy();
-
- wrapper.destroy();
-});
-
-test('finished', async () => {
- const wrapper = mount(List, {
- props: {
- finished: true,
- finishedText: 'Finished',
- },
- });
-
- await later();
- expect(wrapper.emitted('load')).toBeFalsy();
- expect(wrapper.emitted('input')).toBeFalsy();
- expect(wrapper.contains('.van-list__finished-text')).toBeTruthy();
- wrapper.vm.finished = false;
-
- await later();
- expect(wrapper.emitted('load')).toBeTruthy();
- expect(wrapper.emitted('input')).toBeTruthy();
- expect(wrapper.contains('.van-list__finished-text')).toBeFalsy();
-});
-
-test('finished slot', async () => {
- const wrapper = mount(List, {
- props: {
- finished: true,
- },
- slots: {
- finished: () => 'Custom Finished',
- },
- });
-
- expect(wrapper.html()).toMatchSnapshot();
-});
-
-test('error slot', async () => {
- const wrapper = mount(List, {
- props: {
- error: true,
- },
- slots: {
- error: () => 'Custom Error',
- },
- });
-
- expect(wrapper.html()).toMatchSnapshot();
-});
-
-test('immediate check false', async () => {
- const wrapper = mount(List, {
- props: {
- immediateCheck: false,
- },
- });
-
- await later();
- expect(wrapper.emitted('load')).toBeFalsy();
- expect(wrapper.emitted('input')).toBeFalsy();
-});
-
-test('check the case that scroller is not window', async () => {
- const restoreMock = mockGetBoundingClientRect({
- top: 0,
- bottom: 200,
- });
-
- const wrapper = mount({
- template: `
-
-
-
- `,
- components: { List },
- });
-
- const listRef = wrapper.find({
- ref: 'list',
- });
-
- await later();
- expect(listRef.emitted('load')).toBeTruthy();
- expect(listRef.emitted('input')).toBeTruthy();
-
- restoreMock();
-});
-
-test('check the direction props', () => {
- const wrapper = mount(List, {
- slots: {
- default: 'list item
',
- },
- props: {
- direction: 'up',
- },
- });
-
- let children = wrapper.findAll('.van-list > div');
- expect(children[0].is('.van-list__placeholder')).toBeTruthy();
- expect(children[1].is('.list-item')).toBeTruthy();
-
- // change the direction's value
- wrapper.setProps({
- direction: 'down',
- });
-
- children = wrapper.findAll('.van-list > div');
- expect(children[0].is('.list-item')).toBeTruthy();
- expect(children[1].is('.van-list__placeholder')).toBeTruthy();
-});
diff --git a/src/list/test/index.spec.js b/src/list/test/index.spec.js
new file mode 100644
index 000000000..138b18471
--- /dev/null
+++ b/src/list/test/index.spec.js
@@ -0,0 +1,136 @@
+import List from '..';
+import { mount, later, mockGetBoundingClientRect } from '../../../test';
+
+test('should emit load event when reaching bottom', async () => {
+ const wrapper = mount(List);
+
+ await later();
+ expect(wrapper.emitted('load')).toBeTruthy();
+ expect(wrapper.emitted('update:loading')).toBeTruthy();
+ wrapper.unmount();
+});
+
+test('should reload after clicking the error text', async () => {
+ const wrapper = mount(List, {
+ props: {
+ error: true,
+ errorText: 'Request failed. Click to reload...',
+ },
+ });
+
+ await later();
+
+ expect(wrapper.emitted('load')).toBeFalsy();
+ expect(wrapper.emitted('update:loading')).toBeFalsy();
+
+ wrapper.find('.van-list__error-text').trigger('click');
+ expect(wrapper.emitted('update:error')[0][0]).toEqual(false);
+
+ await wrapper.setProps({ error: false });
+ await later();
+ expect(wrapper.emitted('load')).toBeTruthy();
+ expect(wrapper.emitted('update:loading')).toBeTruthy();
+});
+
+test('should render finished text when finished prop is true', async () => {
+ const wrapper = mount(List, {
+ props: {
+ finished: true,
+ finishedText: 'Finished',
+ },
+ });
+
+ await later();
+ expect(wrapper.emitted('load')).toBeFalsy();
+ expect(wrapper.emitted('update:loading')).toBeFalsy();
+ expect(wrapper.find('.van-list__finished-text').exists()).toBeTruthy();
+
+ await wrapper.setProps({ finished: false });
+ await later();
+ expect(wrapper.emitted('load')).toBeTruthy();
+ expect(wrapper.emitted('update:loading')).toBeTruthy();
+ expect(wrapper.find('.van-list__finished-text').exists()).toBeFalsy();
+});
+
+test('should render finished slot correctly', async () => {
+ const wrapper = mount(List, {
+ props: {
+ finished: true,
+ },
+ slots: {
+ finished: () => 'Custom Finished',
+ },
+ });
+
+ expect(wrapper.html()).toMatchSnapshot();
+});
+
+test('should render error slot correctly', async () => {
+ const wrapper = mount(List, {
+ props: {
+ error: true,
+ },
+ slots: {
+ error: () => 'Custom Error',
+ },
+ });
+
+ expect(wrapper.html()).toMatchSnapshot();
+});
+
+test('should not emit load event after mounted when immediate-check prop is false', async () => {
+ const wrapper = mount(List, {
+ props: {
+ immediateCheck: false,
+ },
+ });
+
+ await later();
+ expect(wrapper.emitted('load')).toBeFalsy();
+ expect(wrapper.emitted('update:loading')).toBeFalsy();
+});
+
+test('should emit load event when the scroll parent is not window', async () => {
+ const restoreMock = mockGetBoundingClientRect({
+ top: 0,
+ bottom: 200,
+ height: 100,
+ });
+ const onLoad = jest.fn();
+
+ mount({
+ render: () => (
+
+
+
+ ),
+ });
+
+ await later();
+ expect(onLoad).toHaveBeenCalledTimes(1);
+ restoreMock();
+});
+
+test('should render correctly when direction is up', async () => {
+ const wrapper = mount(List, {
+ slots: {
+ default: () => list item
,
+ },
+ props: {
+ direction: 'up',
+ },
+ });
+
+ let children = wrapper.findAll('.van-list > div');
+ expect(children[0].classes()).toContain('van-list__placeholder');
+ expect(children[1].classes()).toContain('list-item');
+
+ // change the direction's value
+ await wrapper.setProps({
+ direction: 'down',
+ });
+
+ children = wrapper.findAll('.van-list > div');
+ expect(children[0].classes()).toContain('list-item');
+ expect(children[1].classes()).toContain('van-list__placeholder');
+});