Vuex 中的单元测试抛出 AssertionError 等于 Object (type, text)

Posted

技术标签:

【中文标题】Vuex 中的单元测试抛出 AssertionError 等于 Object (type, text)【英文标题】:Unit testing in Vuex throwing AssertionError to equal Object (type, text) Vuex 中的单元测试抛出 AssertionError 等于 Object (type, text) 【发布时间】:2017-08-09 08:25:51 【问题描述】:

到目前为止,单元测试 Vuex 动作一直是一场噩梦,我似乎无法理解它真正在寻找什么。我正在关注https://vuex.vuejs.org/en/testing.html 并使用他们的操作助手功能。

我有一个简单的操作,可以将文本添加到按钮。

createButton( commit, state , payload) 
    let btnString = '';

    if (payload.hasCookie) 
        btnString = 'Welcome back';
     else if (payload.isLoggedIn) 
        btnString = 'Sign out';
     else 
        btnString = 'Sign up';
    

    commit( type: 'CREATE_BUTTON_TEXT', text: btnText );
,

在我的测试中...

describe('Create Button Text', () => 
        it('should render the buttons string ', (done) => 
            const expectedString = 'Welcome back';
            const mock = 
                hasCookie: true,
                isLoggedIn: false,
            ;

            testAction(actions.createButton, mock, state, [
                 type: 'CREATE_BUTTON_TEXT', text: expectedString ,
            ], done);
        );
    );

它正在返回 AssertionError: expected 'CREATE_BUTTON_TEXT' to equal Object (type, text) ... 我没有正确提供预期的 textexpectedString 吗?非常感谢您就此事提供任何指导。

(按照文档中的建议使用 Mocha + Chai)。

【问题讨论】:

【参考方案1】:

看来你的提交语法是错误的。如果您使用了 testAction 帮助器,则参数 expectedMutations 需要具有类型和有效负载的对象列表。 以下代码适用于我:

createButton( commit, state , payload) 
  let btnString = ''

  if (payload.hasCookie) 
    btnString = 'Welcome back'
   else if (payload.isLoggedIn) 
    btnString = 'Sign out'
   else 
    btnString = 'Sign up'
  

  commit('CREATE_BUTTON_TEXT', btnString)

及测试方法:

describe('Create Button Text', () => 
 it('should render the buttons string ', (done) => 
  const expectedString = 'Welcome back'
  const mock = 
   hasCookie: true,
   isLoggedIn: false
  

  testAction(actions.createButton, mock, , [
    type: 'CREATE_BUTTON_TEXT', payload: expectedString 
  ], done)
 )
)

【讨论】:

以上是关于Vuex 中的单元测试抛出 AssertionError 等于 Object (type, text)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 VueX 存储在多个单元测试中保留状态?

Vue 单元测试:如何使用 props、vuex store、watchers、getter 等测试复杂组件

Vue,vuex:如何使用命名空间存储和模拟对组件进行单元测试?

使用 Vuex 对 VueJS 组件进行单元测试时出错

如何在 VueJS 中对 Vuex 动作进行单元测试

如何解决 vuex 和单元测试的问题?