Как в Jasmine протестировать данный код, а именно метод getNumber()?
const PageFactory = SuperClass => class extends SuperClass {
getNumber() {
.......
}
пробовал через
new PageFactory(null)
через просто
PageFactory.getNumber
пишет
TypeError is not a constructor(evaluating 'PageFactory.getNumber())
или
_pageFactory["default"].getNumber()
Проблема заключается в том, как разбирается выражение
new PageFactory(null)
PageFactory - это стрелочная функция, а стрелочные функции не могут быть конструкторами. И в текущей записи оператор new применяется к самой функции PageFactory, а не к ее результату.
Простой вариант, обернуть вызов функции в круглые скобки.
const PageFactory = SuperClass => class extends SuperClass {
getNumber() {
console.log('get number', this.num);
}
}
class S {
constructor() {
this.num = 10;
}
}
(new(PageFactory(S))).getNumber();
С null не все так однозначно. При попытке использовать null, создать экземпляр будет не тривиально:
class A extends null {
getNumber() {
return 20;
}
}
new A();
Как можно заметить, будет брошено исключение.
Для того, чтобы все-таки создать экземпляр, нужно изменить функцию конструктора:
class A extends null {
constructor() {
var _this = Object.create(new.target.prototype);
return _this;
}
getNumber() {
return 10234;
}
}
console.log((new A()).getNumber());
extends null - так себе идея. Используй Object.new при использовании скобок вызова приоритет не тот.Надо так:
const PageFactory = SuperClass => class extends SuperClass {
getNumber() {
return 42;
}
}
var Constructor = PageFactory(Object);
var a = new Constructor(); // или new Constructor
console.log(a.getNumber());
var b = new (PageFactory(Object)); // обращаю внимание на скобки
console.log(b.getNumber());
try {
var c = new PageFactory(Object); // ошибка: (new PageFactory)(Object)
console.log(b.getNumber());
} catch (ex) {
console.log(ex.message);
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости