【问题标题】:Tests on jest and new Date()测试 jest 和 new Date()
【发布时间】:2019-06-17 04:05:38
【问题描述】:

我正在尝试测试类似的功能:

function foo() {
    return {
        key_a: "val_a",
        key_b: new Date()
};

我怎样才能为这种情况制作一个预期的对象进行测试?

const expectedObject = {
    key_a: "val_a",
    key_b: new Date()
}
expect(foo()).toEqual(expectedObject)?
- Expected
+ Received
- "key_b": 2019-01-23T14:04:03.060Z,
+ "key_b": 2019-01-23T14:04:03.061Z,

【问题讨论】:

  • 我猜你需要验证日期是否在范围内
  • 你真的应该监视 new Date 函数(没有使用过 jest 但假设你可以像在 jasmine 中一样),你只需要测试它是同一个函数,而不是它返回什么,你'希望已经测试过了
  • @DarrenSweeney,也许吧,但在这种情况下,我如何确定我的函数返回的正是我想要的?我的意思是我的主要目的是确保该函数将返回我需要的内容... :) 假设它只是从工厂返回的一小部分数据^^
  • 当你监视函数时,让它返回一些东西并检查它是否返回了你所期望的 - 仔细阅读它,间谍在测试方面非常强大

标签: javascript jestjs


【解决方案1】:

对此有多种方法,this thread 中讨论了许多方法。

在这种情况下,可能最简单和最干净的方法是监视 Date 并使用 mockFn.mock.instances 获取从 new Date() 返回的内容,如下所示:

function foo() {
  return {
    key_a: "val_a",
    key_b: new Date()
  };
}

test('foo', () => {
  const spy = jest.spyOn(global, 'Date');  // spy on Date
  const result = foo();  // call foo
  const date = spy.mock.instances[0];  // get what 'new Date()' returned
  const expectedObject = {
    key_a: "val_a",
    key_b: date  // use the date in the expected object
  };
  expect(result).toEqual(expectedObject);  // SUCCESS
})

【讨论】:

    【解决方案2】:

    如果您尝试测试对象“键和属性”:

    const expected = { name:'component name' }
    const actual = { name: 'component name', type: 'form' }
    expect(actual).toMatchObject(expected)
    

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2019-07-27
      • 2019-07-31
      • 2019-08-07
      相关资源
      最近更新 更多