`не может прочитать свойство X неопределенного` для свойства, которое определенно определено - PullRequest
0 голосов
/ 01 июля 2019

Я проверяю свою fromApi функцию:

deal.test.js

// @flow
import Deal from "../src/models/Deal";
import apiProducts from "../__mocks__/api/products";

describe("Deal", () => {
  describe("Deal.fromApi", () => {
    it("takes an api product and returns a Deal", () => {
      const apiDeal = apiProducts[0];
      expect(Deal.fromApi(apiDeal)).toEqual(expectedDeal());
    });
  });
});

Deal.js

export default class Deal {
  constructor(obj: Object) {
    console.log("id", obj.id);
    // console.log(obj);

    this.id = obj.id;
    this.name = obj.name;
    this.headline = obj.headline;
    this.fullPrice = obj.fullPrice;
    this.salePrice = obj.salePrice;
    this.photoUrls = obj.photoUrls;
    this.description = obj.description;
    this.address = obj.address;
    this.location = obj.location;
  }

  static fromApi(json: Object): Deal {
    return new Deal(json);
  }
}

Тест длительныйот прохождения, поскольку входной объект API имеет множество свойств, еще не учтенных в конструкторе, но это не моя проблема.

Тесты не выполняются в первой строке:

 ● Deal › Deal.fromApi › takes an api product and returns a Deal

    TypeError: Cannot read property 'id' of undefined

      16 | 
      17 |   constructor(obj: Object) {
    > 18 |     console.log("id", obj.id);
         |                           ^
      19 | 
      20 |     // console.log(obj);
      21 | 

Однако консоль печатает id просто отлично!Также, когда я регистрировал весь объект, он регистрировал весь объект, как и ожидалось!И все это началось до инструкций журнала, когда тест не удался в первой строке (this.id = obj.id), с той же ошибкой, указывающей на obj в другом месте.

obj is не не определено.Почему это происходит?

Обновление

Когда я начал реализовывать метод fromApi, начиная с пустой сделки (const deal = new Deal()), я получил фактически неопределенный аргумент objв моем конструкторе, что, очевидно, происходит, когда вы не передаете аргумент конструктору.

Итак, я добавил:

if (!obj) return;

в верхней части конструктора, и теперь все работает нормально.

Я не знаю , знаю, что этофактически «решил» «исходную» проблему, с которой я столкнулся, поскольку в этот момент консоль снова подтвердила, что obj не является неопределенным.

Если кто-то может обернуть голову вокруг этого достаточно, чтобы сказать мне, чтоэтот вопрос стоит закрыть, так как он был в первую очередь из-за того, что упустил что-то глупое, я открыт для этого.Или отвечая на это, указывая на глупую вещь, по которой я скучал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...