Alexey
03.02.2017
12:54:50
полностью абстраируясь от браузера
на NativeScript например
Олег
03.02.2017
12:55:09
щас бы html тестить
Alexey
03.02.2017
12:55:38
то смысла нет писать тесты с рендерингом дома
Google
Alexey
03.02.2017
12:56:11
т.к там ты будешь пытаться сделать user-form универсальным компонентом и под веб и под нативные моб платформы
Gleb
03.02.2017
12:56:13
it('should emit submit on valid form', fakeAsync(() => {
const pass = 'valid_password_123456';
page.emailInput.value = 'valid_value@mail.ru';
page.passwordInput.value = pass;
fixture.detectChanges();
tick();
expect(component.form.valid).toEqual(true);
const saveSpy = spyOn(component.onFormSubmit, 'emit');
const btnInst: DxButtonComponent = page.submitBtn.componentInstance;
btnInst.onClick.emit();
expect(saveSpy.calls.any()).toBe(true);
}));
Вот например, в таком духе тест годится на то чтобы претендовать на покрытие кейса о вызове евента если форма валидна?
и ниже скажем не валидное что то ввожу и expect что не вызвался emit, и все я покрыл логинилку считается?
Олег
03.02.2017
12:57:54
это что ты протестировал? что ангуляр работает?
Alexey
03.02.2017
12:57:56
я бы еще проверил что там пришло в saveSpy
мы же ожидаем объект конкретного типа чтобы потом например в api отправить
Gleb
03.02.2017
12:58:40
Ну и это да
Alexey
03.02.2017
12:58:54
а так да, я разделяю такой подход к тестированию
Gleb
03.02.2017
13:01:41
@dersizes Бесполезный тест ?
Олег
03.02.2017
13:03:22
вам видней, лул
Alexey
03.02.2017
13:04:58
да, еще при невалидном вводе можно проверить вывод ошибок/подсказок
если они есть
Gleb
03.02.2017
13:05:57
@dersizes Ну у меня в название кейса написано то что я тестирую, к любой критике открыт и даже рад если есть какие то поправки =)
Google
Олег
03.02.2017
13:06:34
https://github.com/angular/angular/blob/master/modules/%40angular/forms/test/validators_spec.ts
я к этому
вы щас во второй слой покрывыете тестами ангуляр
Gleb
03.02.2017
13:09:03
Да тоже такая мысль была, разве что целиком кейса нет что будет вызван emit, а лишь отдельных валидаторов, но с другой стороны
expect(component.form.valid).toEqual(true);
действительно очевидная
Алексей
03.02.2017
13:09:58
Alexey
03.02.2017
13:10:08
нет, это не так, я не предлагаю проверять инпуты отдельно или стандартные валидаторы типа required и expect(component.form.valid).toEqual(true) можно не проверять, у тебя есть какая-то форма <user-form> в ней может быть что угодно
Иван
03.02.2017
13:10:28
коллеги, а можно как-то ngIf юзать с ngFor не использовав свою директиву?
Alexey
03.02.2017
13:10:33
кастомные контролы, как уже сказали, сложная логика (выбрал одно поле, появились еще другие)
и много чего еще
тебе нужно быть уверенным как работает <user-form> и проверить все use cases
тот же вывод ошибок валидации
Output-свойств тоже может быть больше, кейсы бывают разные
в общем нужно конечно видеть эту грань когда ты начинаешь тестировать сам фреймворк, это справедливое замечание
Олег
03.02.2017
13:14:21
будете @Component @Input @Output покрывать?
Alexey
03.02.2017
13:15:21
то в какой момент твой компонент вызывает определенный Output и то что он туда отправляет это далеко за рамками angular
это твоя логика
Алексей
03.02.2017
13:15:24
Alexey
03.02.2017
13:15:43
и ты ее должен тестировать
Gleb
03.02.2017
13:15:45
https://angular.io/resources/live-examples/testing/ts/app-specs.eplnkr.html
У них там пол тестов тогда покрывают работу самого ангуляра
Иван
03.02.2017
13:16:10
Google
Алексей
03.02.2017
13:16:44
плс
ты иммешь ввиду ngIf и ngFor использовать на одной DOM ноде?
Иван
03.02.2017
13:20:25
ну да
я хочу на каждую итерацию цикла проверять условие
Igor
03.02.2017
13:21:39
не проще коллекцию отфилтровать?
Alexey
03.02.2017
13:22:06
согласен, комбинация ngFor и ngIf это фильтр внутри ngFor
Алексей
03.02.2017
13:23:12
ну да
Так запретили делать.. из за того что ngIf и ngFor это сентаксический сахар и в зависимости от ситуации было разное поведение. Как и сказали - выход это Pipe либо
<template [ng-if]="showCategory()">
<div *ng-for="#category of categories">
Category: {{ category.displayName }}
</div>
</template>
Иван
03.02.2017
13:24:49
спасибо
Alexey
03.02.2017
13:24:54
если присутствие элемента в доме не критично и подразумевается что по клику куда-либо этот элемент нужно будет показать то можно сделать <div *ngFor="..." [hidden]="!showCategory()">
Артем
03.02.2017
13:24:54
Иван
03.02.2017
13:29:13
Я сделал <div ngFor> <component ngIf> </component> </div>
Артем
03.02.2017
13:32:55
Иван
03.02.2017
13:33:58
<div *ngFor="let contact of contactLibrary">
<app-contact-block
*ngIf="contacts.indexOf(contact.id) !== -1"
[title]="contact.title"
[contact_id]="contact.id"
[mask]=""
[(contactInput)]="contactInput"
(contactOutput)="sendToGeneral($event)"
></app-contact-block>
</div>
Артем
03.02.2017
13:35:17
не совсем понимаю как мне применить это к своему случаю
Вот так можно <ng-container *ngFor="let contact of contactLibrary">
<app-contact-block
*ngIf="contacts.indexOf(contact.id) !== -1"
[title]="contact.title"
[contact_id]="contact.id"
[mask]=""
[(contactInput)]="contactInput"
(contactOutput)="sendToGeneral($event)"
></app-contact-block>
</ng-container>
Иван
03.02.2017
13:35:49
а в чем разница если не секрет?
аа понял
погуглил
спасибо за помощь
Артем
03.02.2017
13:37:35
а в чем разница если не секрет?
ну если вас не волнует что у вас там лишний div, то нет разницы) div ведет себя как блочный элемент, а с ng-container там просто не будет лишнего ничего
Алексей
03.02.2017
13:39:31
Google
Иван
03.02.2017
13:40:06
Извините, а где вы вообще берете эти темплейт и ng-container? в оф доке они описаны?
ткните носом
Артем
03.02.2017
13:40:22
Алексей
03.02.2017
13:40:44
Иван
03.02.2017
13:41:23
спасибо
Артем
03.02.2017
13:41:30
dhfj
03.02.2017
13:42:16
Гайз, привет, а есть ресурсы где по ангуляру и нэйтиву на русском можно почитать, с примерчиками желательно?
Иван
03.02.2017
13:42:47
я этого не знал. благодарю еще раз
Алексей
03.02.2017
13:43:32
dhfj
03.02.2017
13:44:12
Gleb
03.02.2017
15:03:08
Кто нибудт организовывал динамические формы? чтобы по модельки сразу построить можно было шаблонную форму?
Alexey
03.02.2017
15:04:10
да
Иван
03.02.2017
15:04:31
Alexey
03.02.2017
15:04:33
мы формат json-schema.org используем
Nikita
03.02.2017
15:06:40
Gleb
03.02.2017
15:07:27
Это вы так покрывали кейс дублирования кода или именно динамические филды были в базе?
@bro_science @sedruid
Google
Alexey
03.02.2017
15:08:53
в бэкенде они хранятся, да
из API получаешь схему, потом по ней строишь форму
Nikita
03.02.2017
15:09:30
динамические, схема объекта описывается тоже схемой и меняется пользователем,
Gleb
03.02.2017
15:10:14
Мне в админку бы просто, у меня на беке loopback генерирует SDK, этим бы воспользоваться
т.е готовую модельку на TS выдает, как то бы замапить ее на форму и все, они там однотипные, единственно там валидации наверное прокидывать геморно?
Nikita
03.02.2017
15:13:14
можно описать в схеме и валидацию,
мы для этого немного расширяли синтаксих схемы
Gleb
03.02.2017
15:17:54
https://github.com/udos86/ng2-dynamic-forms
Вот тут у них готовые я вижу есть варианты для bootstrap итд, у меня комерч. devextreme для него мб реализовать интерфейсы какие, мб самому уж написать наподобие что то
Alexey
03.02.2017
15:29:05
самому конечно писать
Nikita
03.02.2017
15:29:16
там не сложно самому всё написать
на каждый тип данных по компоненту, да дерева обход
интересно если сделать у такого объекта итератор по его обходу, то ng-for по идеи должен его обойти
Gleb
03.02.2017
15:33:04
Во идея кстати
ну все я вдохновлен, так и поступлю, единстенно что у меня там готовый TS interface беком раз выдается замаплюсь на typeof тогда наверное
Nikita
03.02.2017
15:34:35
расскажи потом о результатах, а то мне любопытно =)
Алишер
03.02.2017
15:36:23
Подскажите пожалуйста, как можно при ngSubmit, чтобы из формы бралось не только <input> {name: value} , но еще и какой -нибудь атрибут ?
Алексей
03.02.2017
15:46:59
Алишер
03.02.2017
15:49:43
спасибо! просто в форме несколько инпутов, а мне нужно помимо значений из этих инпутов взять еще в связке название инпута на русском, которое отображается в span над этим инпутом.
Igor
03.02.2017
15:51:06
понимаю что наверное глупый вопрос, нооо ... зачем вам значение из спана?)))
Эта группа больше не существует