+ )
+}
+
+export default hot(BindPlayers)
diff --git a/resources/assets/tests/views/user/Bind.test.ts b/resources/assets/tests/views/user/Bind.test.ts
deleted file mode 100644
index d2f4dd3a..00000000
--- a/resources/assets/tests/views/user/Bind.test.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import Vue from 'vue'
-import { mount } from '@vue/test-utils'
-import { flushPromises } from '../../utils'
-import { showModal } from '@/scripts/notify'
-import Bind from '@/views/user/Bind.vue'
-
-jest.mock('@/scripts/notify')
-
-test('list existed players', async () => {
- Vue.prototype.$http.get
- .mockResolvedValue({ data: [{ name: 'a' }, { name: 'b' }] })
- const wrapper = mount(Bind)
- await flushPromises()
- const options = wrapper.findAll('option')
- expect(options).toHaveLength(2)
-})
-
-test('show input box', async () => {
- Vue.prototype.$http.get.mockResolvedValue({ data: [] })
- const wrapper = mount(Bind)
- await flushPromises()
- const input = wrapper.find('input')
- expect(input.exists()).toBeTrue()
-})
-
-test('submit', async () => {
- Vue.prototype.$http.get.mockResolvedValue({ data: [] })
- Vue.prototype.$http.post
- .mockResolvedValueOnce({ code: 1, message: 'fail' })
- .mockResolvedValueOnce({ code: 0, message: 'ok' })
-
- const wrapper = mount(Bind)
- const form = wrapper.find('form')
- wrapper.find('input').setValue('abc')
-
- form.trigger('submit')
- await flushPromises()
- expect(wrapper.find('.alert').text()).toBe('fail')
-
- form.trigger('submit')
- await flushPromises()
- expect(showModal).toBeCalledWith({ mode: 'alert', text: 'ok' })
-})
diff --git a/resources/assets/tests/views/user/BindPlayers.test.tsx b/resources/assets/tests/views/user/BindPlayers.test.tsx
new file mode 100644
index 00000000..e2184a3f
--- /dev/null
+++ b/resources/assets/tests/views/user/BindPlayers.test.tsx
@@ -0,0 +1,76 @@
+import React from 'react'
+import { render, fireEvent, wait } from '@testing-library/react'
+import { t } from '@/scripts/i18n'
+import * as fetch from '@/scripts/net'
+import BindPlayers from '@/views/user/BindPlayers'
+
+jest.mock('@/scripts/net')
+
+test('loading indicator', () => {
+ fetch.get.mockResolvedValue({ data: [] })
+ const { queryByTitle } = render(