【问题标题】:Jest Received: serializes to the same string on Object收到笑话:序列化为 Object 上的相同字符串
【发布时间】:2020-07-14 06:51:31
【问题描述】:

新手在这里测试,我遇到了这个错误

module.js

import reducer from './reducer';

export default function getGModalModule({ domain }) {
  return {
    id: `GModal-module-${domain}`,
    reducerMap: {
      [domain]: reducer({
        domain,
      }),
    },
  };
}

module.test.js

import getGModalModule from '../module';
import reducer from '../reducer';

describe('getGModalModule', () => {
  it('returns the correct module', () => {
    const reducers = reducer({
      domain: 'demo'
    })

    const expectVal = getGModalModule({
      domain: 'demo'
    });
    const received = {
      id: `GModal-module-demo`,
      reducerMap: {
        demo: reducers,
      },
    }
    console.log("expectVal", expectVal)
    console.log("received", received)

    expect(expectVal).toEqual(received);
  });
});

错误说明如下:

Expected: {"id": "GModal-module-demo", "reducerMap": {"demo": [Function gModalReducer]}}
Received: serializes to the same string

我尝试注销结果,它们看起来完全一样,知道为什么这没有通过测试吗?

expectVal { id: 'GModal-module-demo', reducerMap: { demo: [Function: gModalReducer] } }
received { id: 'GModal-module-demo', reducerMap: { demo: [Function: gModalReducer] } }

提前致谢,

【问题讨论】:

    标签: javascript module jestjs


    【解决方案1】:

    Jest 无法比较函数。即使它们被序列化为同一个字符串,即使它们的源代码相同,函数也可能通过闭包引用不同的变量或绑定到不同的this,所以我们不能说函数是否相等。

    expect(function aaa() {}).toEqual(function aaa() {}); // fails
    

    您可能希望在比较之前明确排除方法或 create custom matcher 会为您做到这一点。但是如果你测试一下函数的作用会更好。在您的情况下,您可能对./reducer.js 进行了单独的测试,对吧?您可以同时加入两个测试:一个是单独测试 reducer,另一个是检查对象键名。

    【讨论】:

    • 谢谢,就我而言,我使用的是redux-dynamic-modules,正如你所看到的,reducerMap 接受一个键/值缩减器,其中值必须是reducer function,这就是我卡住的地方;(
    • 你想在这里测试什么?该结构是否符合预期?省略内部有函数的成员的提议是什么?
    • 起初我试图测试从getGModalModule 函数返回的结果,但是您关于检查键名的建议对我来说听起来不错,它确实解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 2020-07-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多