Soy nuevo en Vue y StackOverflow, pero intentaré explicar mi problema.
Obtengo un TypeError cuando intento ejecutar la prueba unitaria para mi aplicación.
"TypeError: no se pueden leer las propiedades de undefined (leyendo 'push')"
https://i.stack.imgur.com/pqUkZ.png
El programa se ejecuta exactamente como debería, de lo contrario, es solo la prueba la que falla.
La prueba intenta ejecutar $router.push en la aplicación, pero no puede, porque no sabe qué es eso. ¿Cómo puedo simular con éxito el método de inserción durante la prueba?
Mi código de prueba example.spec.js se ve así:
import { shallowMount } from '@vue/test-utils' import LoginView from '@/views/LoginView.vue' describe('LoginView.vue', () => { it('loginSuccess-test', async () => { const wrapper = shallowMount(LoginView, { mocks: { $router: { push: () => {} } } }) await wrapper.setData({username:'user', password:'pass'}) await wrapper.find('button').trigger('click') const statusId = wrapper.find('#loginstatusLabel'); expect(wrapper.find('#loginstatusLabel').element.textContent).toBe('true') }) })
Mi código de métodos LoginView.vue se ve así:
methods: { checkCredentials() { if (this.username === 'user' && this.password === 'pass') { this.loginSuccess = 'true'; this.$router.push({ name: 'home' }); } else { this.toast.error("Username or password is incorrect Try again"); this.message = 'Login failed!'; this.isActive = false; } } </script>
Estoy tratando de hacer que el método push redirija al usuario a "casa" cuando inicie sesión correctamente y se burle de la redirección en las pruebas.
cualquier ayuda será apreciada
Prueba esto:
mocks: { $router: { push: jest.fn(), } }