断言摩卡上的箭头功能
Assert arrow function on mocha
我正在尝试从具有箭头功能的 redux 断言一个动作,并且鉴于它创建了一个新引用,我无法使用 chai 断言它。
代码如下:
export function save(product) {
return {
types: ['REQUEST', 'SUCCESS', 'FAILED'],
callAPI: () => fetchSomething()
payload: {
product
}
};
}
export function saveOrUpdate(product) {
return product.id ? update(product) : save(product);
}
我在测试中尝试这样做:
const action = saveOrUpdate(product);
expect(action).to.be.eql(save(product));
由于 callAPI 属性,这没有用,所以我尝试了使用 chai-subset 的方法,忽略了 属性 callAPI,但感觉就像 hack:
const action = saveOrUpdate(product);
const {types, payload} = save(product);
expect(action).to.containSubset({
types,
payload
});
有没有办法使用第一种方法断言?
谢谢!!
我认为您可以使用 Chai Spies 检查是否调用了 save
方法。
var spy = chai.spy(save);
const action = saveOrUpdate(product);
expect(spy).to.have.been.called();
如您所知,每次调用 save
函数时您的代码方式,JavaScript 虚拟机必须创建一个新的 Function
实例。您可以将其替换为对单个函数的引用,该函数一劳永逸地创建并可重复使用。 这将使相等性测试变得微不足道。
如果您担心 callAPI
被错误的参数调用,您可以像我在这里做的那样包装 fetchSomething
;
function callFetchSomething() {
fetchSomething();
}
export function save(product) {
return {
types: ['REQUEST', 'SUCCESS', 'FAILED'],
callAPI: callFetchSomething,
payload: {
product
}
};
}
如果您不需要防止错误调用,那么您可以 callAPI: fetchSomething
。
我正在尝试从具有箭头功能的 redux 断言一个动作,并且鉴于它创建了一个新引用,我无法使用 chai 断言它。
代码如下:
export function save(product) {
return {
types: ['REQUEST', 'SUCCESS', 'FAILED'],
callAPI: () => fetchSomething()
payload: {
product
}
};
}
export function saveOrUpdate(product) {
return product.id ? update(product) : save(product);
}
我在测试中尝试这样做:
const action = saveOrUpdate(product);
expect(action).to.be.eql(save(product));
由于 callAPI 属性,这没有用,所以我尝试了使用 chai-subset 的方法,忽略了 属性 callAPI,但感觉就像 hack:
const action = saveOrUpdate(product);
const {types, payload} = save(product);
expect(action).to.containSubset({
types,
payload
});
有没有办法使用第一种方法断言?
谢谢!!
我认为您可以使用 Chai Spies 检查是否调用了 save
方法。
var spy = chai.spy(save);
const action = saveOrUpdate(product);
expect(spy).to.have.been.called();
如您所知,每次调用 save
函数时您的代码方式,JavaScript 虚拟机必须创建一个新的 Function
实例。您可以将其替换为对单个函数的引用,该函数一劳永逸地创建并可重复使用。 这将使相等性测试变得微不足道。
如果您担心 callAPI
被错误的参数调用,您可以像我在这里做的那样包装 fetchSomething
;
function callFetchSomething() {
fetchSomething();
}
export function save(product) {
return {
types: ['REQUEST', 'SUCCESS', 'FAILED'],
callAPI: callFetchSomething,
payload: {
product
}
};
}
如果您不需要防止错误调用,那么您可以 callAPI: fetchSomething
。