断言摩卡上的箭头功能

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