【问题标题】:Assert arrow function on mocha在 mocha 上断言箭头功能
【发布时间】:2017-05-27 20:58:06
【问题描述】:

我正在尝试从具有箭头函数的 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
});

有没有办法用第一种方法断言?

谢谢!!

【问题讨论】:

  • 我认为问题在于您将save 作为eql 函数的参数调用。也许我们需要找到另一种方法来检查是否调用了 save 而不是 update

标签: redux tdd mocha.js chai async.js


【解决方案1】:

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

如果您担心 callAPI 被错误的参数调用,您可以像我在这里所做的那样包装 fetchSomething

function callFetchSomething() {
    fetchSomething();
}

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

如果您不需要防止错误调用,那么您可以使用callAPI: fetchSomething

【讨论】:

    【解决方案2】:

    我认为您可以使用Chai Spies 来检查是否调用了save 方法。

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

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 2015-03-26
      • 2017-01-11
      • 2021-01-31
      • 2019-06-25
      • 2016-11-29
      • 1970-01-01
      • 2021-03-14
      • 2013-12-21
      相关资源
      最近更新 更多