copal: вы определитесь что вы тестируете, List или Factory? В вашем сценарии вот все эти проверки не нужны, так как это уже реализация List, вы о ней ничего знать не должны. Реализация этой штуки уже и так покрыта тестами. Вы можете полностью list подменить на мок, и трекать только работу вашего метода с этим объектом.
Ну и да, не зацикливайтесь на "тестировать метод". Вы тестируете поведение, путем проверки итогового состояния. А итоговое состояние хранит уже объект.
В вашем случае я бы вообще эту штуку юнит тестами не покрывал бы, ибо она тривиальна. Вместо этого я бы добавил интеграционный тест который проверяет общую функциональность.
Если же следовать вашему сценарию - то у нас тест будет на 100% знать как устроена реализация метода. А это не очень хорошо, так как на каждый чих придется править тесты. Ну то есть баланс надо соблюдать как-то.
copal: webpack - банделр, gulp - таск раннер. Разные зоны ответственности, стало бы смысла сравнивать их нет. webpack все операции проводит в памяти, так что "проигрыша" по скорости не должно быть. Для инкрементной сборки в ng6-starter я подключил webpack-dev-middleware, который кэширует файлы в памяти.
dizzy7: вообще не понимаю как можно говорить о производительности в контексте перехода на SPA и т.д. Имхо это бред мыслить этими категориями. В контексте форм вы просто могли свой хэндлер написать, что бы уменьшить количество магии. Ну и кеширование и т.д. 2-5 секунд это как-то слишком много.
Алексей Романенко: а потом начинается "мэпим данные на сущности", а потом сущности из-за этого становятся анемичной моделью.... и при этом все работает медленно, требует вместо обычных простых мэппингов создание целого FormType и т.д. Словом не нужно это все никому, если у нас форм нет. А вот если формы есть, и они сложные - то лучше symfony/forms я ничего не видел.
HoHsi: у роутеров есть такая штука как ресолверы (resolve) - они отрабатывают до загрузки какого-то стэйта и должны вернуть промис (или данные). Соответственно они могут так же реджектнуть переход на конкретный скрин (или вообще на все, если вы юзаете uiRouter и определили базовый стэйт.