funkwhale/front/tests/unit/utils.js

70 wiersze
1.7 KiB
JavaScript

// helper for testing action with expected mutations
import Vue from 'vue'
import { expect } from 'chai'
export const render = (Component, props) => {
const Constructor = Vue.extend(Component)
return new Constructor({ props }).$mount()
}
export const testAction = ({ action, payload, params, expectedMutations, expectedActions }, done) => {
let mutationsCount = 0
let actionsCount = 0
if (!expectedMutations) {
expectedMutations = []
}
if (!expectedActions) {
expectedActions = []
}
// mock commit
const commit = (type, payload) => {
const mutation = expectedMutations[mutationsCount]
expect(mutation.type).to.equal(type)
if (payload) {
expect(mutation.payload).to.deep.equal(payload)
}
mutationsCount++
}
// mock dispatch
const dispatch = (type, payload, options) => {
const a = expectedActions[actionsCount]
if (!a) {
throw Error(`Unexecpted action ${type}`)
}
expect(a.type).to.equal(type)
if (payload) {
expect(a.payload).to.deep.equal(payload)
}
if (a.options) {
expect(options).to.deep.equal(a.options)
}
actionsCount++
}
const end = function () {
// check if no mutations should have been dispatched
if (expectedMutations.length === 0) {
expect(mutationsCount).to.equal(0)
}
if (expectedActions.length === 0) {
expect(actionsCount).to.equal(0)
}
}
// call the action with mocked store and arguments
const promise = action({ commit, dispatch, ...params }, payload)
if (promise) {
promise.then(end)
return promise
} else {
return end()
}
}
export const sleep = (n = 0) => new Promise(resolve => setTimeout(resolve, n))