[英]How to access this.app and/or a injected plugin in a Vuex store test with Nuxt and Jest
在 Vuex 存儲操作中,我使用 this.app.router 和注入屬性 $alert 的 Nuxt 插件。
當我嘗試使用 Jest 測試 Vuex 商店時,測試一直失敗,因為這兩個屬性都未定義。
我正在將 getter、mutations 和 action 作為一個 javascript 函數分別進行單元測試,就像 這里描述的那樣。
所以不要使用 Vue Test Utils 或 Vuex。
我已經嘗試過但沒有任何效果:
vue-test-utils
設置一個新的Vuex.Store
和localVu
e。$alert
設置全局變量。// actions.js
export default {
async signup({ dispatch, state }, payload) {
try {
await dispatch('createUserData', payload)
await dispatch('setUser', payload)
this.app.router.push(state.redirectAfterLogin)
} catch (error) {
this.$alert.error(`errors.${error.code}`)
}
}
}
// actions.spec.js
import actions from '@/store/auth/actions'
describe('Auth store', () => {
let dispatch
let state
test('signup', async () => {
dispatch = jest.fn()
state = {
user: null
}
await actions.signup(
{ dispatch, state },
{
email: 'test@test.nl',
password: 'password',
displayName: 'Test'
}
)
expect(dispatch).toHaveBeenCalledWith('createUserData')
expect(dispatch).toHaveBeenCalledWith('setUser')
})
})
有人知道我可以在哪里以及如何在我的測試文件中將此方法定義為模擬函數嗎?
localVue
與 Vuex localVue
使用$alert Vuex.Store.prototype.$alert = jest.fn().mockReturnValue({})
當您在await actions.signup
add 之前單獨測試它們時,很容易操作是純函數: actions.$alert ={}; actions.$alert.error =jest.fn();
actions.$alert ={}; actions.$alert.error =jest.fn();
甚至更好地將它添加到 beforeEach 函數中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.