TypeError:state.customerComplaints.add 不是开玩笑单元测试中的函数

Posted

技术标签:

【中文标题】TypeError:state.customerComplaints.add 不是开玩笑单元测试中的函数【英文标题】:TypeError: state.customerComplaints.add is not a function in jest unit test 【发布时间】:2021-09-13 13:11:22 【问题描述】:

我有一个简单的变异方法,可以将元素添加到我的集合中。现在我正在尝试测试该方法,并开玩笑抛出如下所述的错误。

//Vuex
const state = 
  customerComplaints : new Set()
;

// Mutation method
setCustomerComplaints(state, data) 
  state.customerComplaints.add(data);


//Error I am getting when running the test
//TypeError: state.customerComplaints.add is not a function

//Jest test
it('should do something', () => 
  const state = 
    customerComplaints: 
  ;
  myStore.mutations.setCustomerComplaints(state, 'UI issue');
  expect(state.customerComplaints).toBe('UI issue');
);

我试图模拟它,但我无法成功。请帮助我通过这个测试。

【问题讨论】:

【参考方案1】:

您的测试有一个不包含add 方法的本地state 对象,并且它将state 传递给尝试调用add 的变异方法,从而导致您观察到的错误。

一个简单的解决方法是将您的本地 state.customerComplaints 初始化为 Set,就像您在实际的 Vuex 商店中所做的那样:

it('should do something', () => 
  const state = 
    customerComplaints: new Set()
  ;
  myStore.mutations.setCustomerComplaints(state, 'UI issue');
  //...
);

另外,要验证Set 是否包含项目,请使用toContain,而不是toBe

// expect(state.customerComplaints).toBe('UI issue');
expect(state.customerComplaints).toContain('UI issue');

【讨论】:

以上是关于TypeError:state.customerComplaints.add 不是开玩笑单元测试中的函数的主要内容,如果未能解决你的问题,请参考以下文章

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

TypeError: key 必须是一个字符串,一个缓冲区或一个对象在 typeError 与 GCP 文件存在

TypeError: jQueryxxxxxx 不是函数