测试突变是否触发了反应性

时间:2018-12-12 12:03:31

标签: vue.js vuex

我最近遇到了Vuex的问题,事实证明这是由突变引起的,没有触发反应性。我不确定如何在不安装组件的情况下检测是否在单元测试中触发了反应性。在不安装任何组件的情况下进行测试的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

突变很容易测试,因为它们只是完全依赖其参数的函数。诀窍是:如果您使用ES2015模块,并将您的突变放入store.js文件中,则除了默认导出外,还必须将突变导出为命名导出。

然后要验证是否触发了某些触发器,可以使用Sinon的间谍。

const state = { ... }

// export `mutations` as a named export
export const mutations = { ... }

export default new Vuex.Store({
  state,
  mutations
})

使用Mocha和Chai进行示例测试(您也可以使用其他库):

// mutations.js
export const mutations = {
  triggerMutation: state => state.doSth
}

以及规格文件:

// mutations.spec.js
var chai = require('chai');
var sinon = require('sinon');
var sinonChai = require('sinon-chai');
var mutations = require('store');
var expect = chai.expect;
chai.use(sinonChai);

const { mutate } = mutations

describe('mutations', () => {
  it('Mutate should trigger', () => {
    // set up your spy
    var spy = sinon.spy();

    // apply the mutation
    mutate(spy);

    // assert result
    expect(spy).to.have.been.calledWith('triggerMutation');
  })
})