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