在摩卡上断言箭头功能



我正在尝试从具有箭头函数的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,但它感觉像黑客:

const action = saveOrUpdate(product);
const {types, payload} = save(product);
expect(action).to.containSubset({
   types,
   payload
});

无论如何可以使用第一种方法断言吗?

谢谢!!

正如你所发现的,每次调用save函数时,你都有代码的方式,JavaScript虚拟机必须创建一个新的Function实例。您可以将其替换为对单个函数的引用,该函数是一劳永逸地创建并重用的。这将使相等性测试变得微不足道。

如果你担心callAPI被用糟糕的论点来称呼,你可以像我在这里所做的那样包装fetchSomething;

function callFetchSomething() {
    fetchSomething();
}
export function save(product) {
  return {
    types: ['REQUEST', 'SUCCESS', 'FAILED'],
    callAPI: callFetchSomething,
    payload: {
      product
    }
  };
}

如果您不需要防止错误呼叫,那么您可以拥有 callAPI: fetchSomething .

我认为您可以使用柴间谍来检查是否调用了save方法。

var spy = chai.spy(save);
const action = saveOrUpdate(product);
expect(spy).to.have.been.called();

最新更新