Size: a a a

2020 March 24

m

mkots in JS for testing
Какой-то очень странный вопрос, зачем вам из стринги делать класс, а из него делать инстанс, это не фабрика
источник

A

Andrey in JS for testing
Oleksandr Khotemskyi
может тебе просто нужен Generic?
да, я думал что б он мне возвращал getPageForName<T extends BasePage>(pageName:string):T{}
но с телом метода не могу пока разобраться...
источник

OK

Oleksandr Khotemskyi in JS for testing
Andrey
да, я думал что б он мне возвращал getPageForName<T extends BasePage>(pageName:string):T{}
но с телом метода не могу пока разобраться...
я вот что-то похожее на докладе показывал
источник

m

mkots in JS for testing
Мапу создать и по строковому ключу дергать конструкторы))
источник

AP

Alexander Popov in JS for testing
Andrey
Могу ли я в TS имея стрингой имя класса получить типизированный инстанс этого класса? Хочу фабрику создать
нахуа?
источник

OK

Oleksandr Khotemskyi in JS for testing
mkots
Мапу создать и по строковому ключу дергать конструкторы))
вот, я так и делал )
источник

A

Andrey in JS for testing
Oleksandr Khotemskyi
вот, я так и делал )
а это идея, попробую
источник

m

mkots in JS for testing
Ну это такое себе решение. Я бы предложил посмотреть в сторону паттерна Билдер, ну или про диспетчеризацию почитать, если вы любитель героина
источник

OK

Oleksandr Khotemskyi in JS for testing
Andrey
да, я думал что б он мне возвращал getPageForName<T extends BasePage>(pageName:string):T{}
но с телом метода не могу пока разобраться...
const pages = [
'mobile': mobileHomePage,
'tablet': tabletHomePage
'desktop': desktopHomePage
]

function getPageFor(pageName) {
    return new pages[pageName]
}
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleksandr Khotemskyi
const pages = [
'mobile': mobileHomePage,
'tablet': tabletHomePage
'desktop': desktopHomePage
]

function getPageFor(pageName) {
    return new pages[pageName]
}
но так юзать нельзя, надо еще бросать нормальные ошибки и унаследовать все страницы от одного интерфейса\абстрактного класса
источник

OK

Oleksandr Khotemskyi in JS for testing
Andrey
а это идея, попробую
тут есть лютый забористый код без комментариев, все как ты любишь -

https://github.com/Xotabu4/versioned-pageobjects/blob/master/lib/versioned.ts
источник

m

mkots in JS for testing
А какой в этом смысл вообще? Я что-то упорно не могу идею понять
источник

A

Andrey in JS for testing
mkots
А какой в этом смысл вообще? Я что-то упорно не могу идею понять
смысл есть всегда, особенно когда у тебя огурец юзаеться. Хочу со степа по имени класса получить пейджу с методами
источник

OK

Oleksandr Khotemskyi in JS for testing
mkots
А какой в этом смысл вообще? Я что-то упорно не могу идею понять
Чтобы в тестах у тебя правильные пейджобджекты автоматом подставлялись
источник

OK

Oleksandr Khotemskyi in JS for testing
в зависимости от того какой сейчас конфиг - мобилка, десктоп, таблетка...
источник

m

mkots in JS for testing
Ааа, ну так вроде есть смысл
источник

m

mkots in JS for testing
Есть у меня для вас решение)))
источник

m

mkots in JS for testing
const c = (x) => new Function('return new '+x+'()');
источник

m

mkots in JS for testing
Ну чтобы никто даже не подумал что вы нормальный человек)
источник

OK

Oleksandr Khotemskyi in JS for testing
+ у меня был проект где у нас еще были бизнес версии приложухи разные, с разной логикой и юайкой, то я делал версионированные пейджобджекты, и каждый имплементил один интерфейс. Глянь доклад мой короче, там все проще намного, тут код это меня уже понесло, там даже папочка DI есть
источник