javascript - 用 Jest 测试匿名函数相等性

标签 javascript node.js unit-testing jestjs equality

有没有办法用 jest@20 测试匿名函数的相等性?

我正在尝试通过类似于以下内容的测试:

const foo = i => j => {return i*j}
const bar = () => {baz:foo(2), boz:1}

describe('Test anonymous function equality',()=>{

    it('+++ foo', () => {
        const obj = foo(2)
        expect(obj).toBe(foo(2))
    });

    it('+++ bar', () => {
        const obj = bar()
        expect(obj).toEqual({baz:foo(2), boz:1})
    });    
});

目前产生:

  ● >>>Test anonymous function equality › +++ foo

    expect(received).toBe(expected)

    Expected value to be (using ===):
      [Function anonymous]
    Received:
      [Function anonymous]

    Difference:

    Compared values have no visual difference.

  ● >>>Test anonymous function equality › +++ bar

    expect(received).toBe(expected)

    Expected value to be (using ===):
      {baz: [Function anonymous], boz:1}
    Received:
      {baz: [Function anonymous], boz:1}

    Difference:

    Compared values have no visual difference.

最佳答案

在这种情况下,如果不重写逻辑以使用命名函数,除了在测试前声明函数之外,您实际上别无选择,例如

const foo = i => j => i * j
const foo2 = foo(2)
const bar = () => ({ baz: foo2, boz: 1 })

describe('Test anonymous function equality', () => {
  it('+++ bar', () => {
    const obj = bar()
    expect(obj).toEqual({ baz: foo2, boz: 1 })
  });    
});

或者,您可以检查 obj.bar 是否为 any 函数,使用 expect.any(Function):

expect(obj).toEqual({ baz: expect.any(Function), boz: 1 })

这实际上可能更有意义,具体取决于测试的上下文。

关于javascript - 用 Jest 测试匿名函数相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45644098/

相关文章:

javascript - 查找所有 li 项的数据属性值的最大值

javascript - 保护 Angular 属性

javascript - SCRAM 客户端 Javascript 实现/示例/库?

node.js - 我应该安装哪个 Node.js 模块才能使用谷歌 Protocol Buffer ?

c# - 使用 MSTest 属性

unit-testing - QT:获取对象的类名

c# - 如何模拟 IMongoDatabase

javascript - react-pdf 安装时的 webpack 插件错误

node.js - Laravel Echo 服务器无法进行身份验证,HTTP 状态为 500

javascript - NodeJS Forge - 将加密字节字符串转换为十六进制字符数组