Фабричный класс создает нетипизированные объекты - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть фабрика. Его цель - облегчить внедрение зависимости. Это выглядит примерно так:

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 {

Все внутренние данные совпадают.

Что такое вызывая разные типы объектов?

1 Ответ

1 голос
/ 29 февраля 2020

Используйте console.log для проверки того, что возвращается после каждого вызова.

Рассуждая о вашем коде (не выполняя его), я не вижу объяснения этому.

У меня был быстрый просмотреть исходный код Jest Сопоставитель объектов здесь: https://github.com/facebook/jest/blob/master/packages/expect/src/matchers.ts#L878

Здесь используются тесты iterableEquality и subsetEquality: https://github.com/facebook/jest/blob/master/packages/expect/src/utils.ts

toMatchObject проверяет, является ли это объектом, имеет ли он один и тот же конструктор (что выглядит как провальный тест), а затем, что объект, с которым вы сравниваете его, имеет подмножество ключей тестируемого объекта.

Я бы сначала посмотрел на конструктор объекта, возвращенного фабрикой Noodle.

Если вы создадите MRE в репозитории GitHub, я проверю его и отследю выполнение кода ( или вы можете сделать это - просто вставьте console.log утверждения в Jest в node_modules).

...