Factory class 创建无类型对象

Factory class creates untyped objects

我有一家工厂。它的目的是促进依赖注入。它看起来像:

import SomeImportantObject from "./SomeImportantObject"
import DataInterface from "./DataInterface"

class NoodleFactory {
  this.dependency: SomeImportantObject
  constructor(dependency: SomeImportantObject) {
    // Dependencies.
    this.dependency = dependency;
  }

  create(data: DataInterface) {
    return new Noodle(data, this.dependency);
  }
}

我正在为它创建一个测试以确保它正确地创建对象。该测试非常类似于:

data = {
  // Data.
}

mockDependency = "a mocked dependency."

testNoodleFactory = new NoodleFactory(mockDependency);

const expected = new Noodle(data, mockDependency);
const actual = testNoodleFactory.create(data);

test("Factory creates noodles", () => {
  expect(actual).toMatchObject(expected);
});

当我运行测试时,出现以下错误:

    @@ -1,6 +1,6 @@
    - Noodle {
    + Object {

所有内部数据匹配。

是什么导致对象类型不同?

使用 console.log 检查每次调用返回的内容。

推理你的代码(不执行它),我看不出对此有任何解释。

我快速浏览了 Jest 源代码。对象匹配器在这里:https://github.com/facebook/jest/blob/master/packages/expect/src/matchers.ts#L878

它使用此处的 iterableEqualitysubsetEquality 测试: https://github.com/facebook/jest/blob/master/packages/expect/src/utils.ts

toMatchObject 检查它是一个对象,它们具有相同的构造函数(看起来像失败的测试),然后您与之比较的对象具有该对象的键的子集你正在测试。

我会先看看从面条工厂返回的对象的构造函数。

如果您在 GitHub 存储库中创建 MRE,我将检查它并跟踪代码执行(或者您可以这样做 - 只需在 Jest 中注入 console.log 语句node_modules).