收到笑话:序列化为对象上的相同字符串

Duc*_*ong 4 javascript module jestjs

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

模块.js

import reducer from './reducer';

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

Run Code Online (Sandbox Code Playgroud)

模块.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);
  });
});
Run Code Online (Sandbox Code Playgroud)

该错误是这样的:

Expected: {"id": "GModal-module-demo", "reducerMap": {"demo": [Function gModalReducer]}}
Received: serializes to the same string
Run Code Online (Sandbox Code Playgroud)

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

expectVal { id: 'GModal-module-demo', reducerMap: { demo: [Function: gModalReducer] } }
received { id: 'GModal-module-demo', reducerMap: { demo: [Function: gModalReducer] } }
Run Code Online (Sandbox Code Playgroud)

提前致谢,

sky*_*yer 7

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

expect(function aaa() {}).toEqual(function aaa() {}); // fails
Run Code Online (Sandbox Code Playgroud)

您可能希望在显式比较之前排除方法,或者创建自定义匹配器来为您执行此操作。但如果你测试一下函数的作用会更好。在你的情况下,你可能有单独的测试./reducer.js,对吧?您可以加入两项测试:一项是单独测试减速器,另一项是检查对象键名称。