• Чем отличаются интеграционное, unit и e2e тестирование на frontend?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как в юнит тестах тестить нажатие на кнопку? Или мы можем тестить только функцию-обработчик?


    В юнит тестах вы можете тестировать контроллер компонента, что мол он нужное состояние выставляет. DOM проверять не нужно. Механизм биндингов и так хорошо покрыт юнит тестами на уровне фреймворка. Чаще юнитами покрывают сервисы, ресолверы и прочее. Ими проверяют логику работы отдельных маленьких кусочков.

    в интеграционных можно уже потихоньку проверять DOM отдельных компонентов. Просто потому что вы могли опечататься при написании биндингов. Ну то есть цель интеграционных тестов - проверить что в сборке компоненты работают.

    В e2e (end to end) вы загружаете все приложение целиком и имитируете действия пользователей. Причем взаимодействие происходит насквозь. От кнопочки в браузере до запросов в базе данных на сервере (если есть бэкэнд). Это самый медленный вид тестирования и им стоит покрывать только позитивные сценарии.

    Читать про пирамиду тестирования.
    Ответ написан
    Комментировать
  • Имеет ли смысл такая конструкция в JS?

    Xuxicheta
    @Xuxicheta
    инженер
    Цикл for..in перебирает свойства объекта и всех его прототипов. Чтобы исключить свойства прототипов из цикла используется проверка hasOwnProperty.
    Сейчас это считается устаревшим, в моде перебор объекта через Object.keys/Object.values/Object.enties с помощью for..of или перебирающих методов Array.

    т.е. нынче конструкция
    for (var i in result) {
        if (result.hasOwnProperty(i)) {
            //Остальной код
        }
    }

    должна выглядеть так
    Object.keys(result).forEach((i) => {
      //Остальной код
    });
    Ответ написан
    Комментировать
  • Имеет ли смысл такая конструкция в JS?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    result.hasOwnProperty(i) не может быть false. Во всяком случае я не придумал подходящего "кейса".

    Может быть и false, если какое-то свойство определено в прототипе:
    class Test {
        constructor() {
            this.foo = 'foo';
        }
    };
    
    Test.prototype.bar = 'bar';
    
    const test = new Test();
    
    console.log('foo' in test); // true
    console.log('bar' in test); // true
    console.log(test.hasOwnProperty('foo')); // true
    console.log(test.hasOwnProperty('bar')); // false
    Ответ написан
    Комментировать
  • Книга о безопасном коде?

    GreyCrew
    @GreyCrew
    Full-stack developer
    есть книга Совершенный код
    там есть глава, где описаны подходы безопасного программирования, и отдельно о проектировании и написанию кода, очень подходит для новичков в отличие от Чистого кода , хотя ее я тоже советую.
    Ответ написан
    Комментировать