кодесурса
«Угловое

тестирование

script1adsense2code
script1adsense3code

Это руководство предлагает советы и методы для модульного и интеграционного тестирования угловых приложений.

Настройка и настройки

Angular CLI загружает и устанавливает все необходимое для тестирования приложения Angular с помощью инфраструктуры тестирования Jasmine.

Любой проект, созданный с помощью CLI, сразу готов к тестированию. Просто запустите команду CLI теста ng:

```ng test```

Команда ng test создает приложение в режиме наблюдения и запускает тестер Karma.

Вывод консоли выглядит примерно так:

 `` `
10% строительных модулей 1/1 модулей 0 активных
... INFO [karma]: Сервер Karma v1.7.1 запущен по адресу http://0.0.0.0:9876/
... INFO [launcher]: запуск браузера Chrome ...
... INFO [launcher]: запуск браузера Chrome
... INFO [Chrome ...]: подключен через разъем ...
Хром ...: Выполнено 3 из 3 УСПЕХ (0,135 с / 0,205 с)
`` ` 

Последняя строка журнала является наиболее важной. Это показывает, что Карма прошла три испытания, которые все прошли.

Браузер Chrome также открывается и отображает результаты теста в «Jasmine HTML Reporter», как показано в приведенном ниже фрагменте кода.

«Угловое

конфигурация

CLI заботится о конфигурации Жасмин и Карма для нас. Мы можем настроить многие параметры, отредактировав файлы karma.conf.js и test.ts в папке src /.

Файл karma.conf.js является частичным файлом конфигурации Karma. CLI создает полную конфигурацию среды выполнения в памяти на основе структуры приложения, указанной в файле angular.json, дополненной karma.conf.js.

Вы также можете выполнить модульное тестирование приложения Angular с другими библиотеками тестирования и участниками тестирования. Каждая библиотека и исполнитель имеют свои собственные особые процедуры установки, настройки и синтаксиса, которые не будут рассмотрены в этом руководстве.

Включить отчеты о покрытии кода

CLI может запускать модульные тесты и создавать отчеты о покрытии кода. Отчеты о покрытии кода показывают вам любые части нашей кодовой базы, которые могут быть не должным образом протестированы вашими модульными тестами. Чтобы создать отчет о покрытии, запустите следующую команду в корневом каталоге вашего проекта.

`ng test --no-watch --code-coverage

Когда тесты завершены, команда создает новую папку / охват в проекте. Откройте файл index.html, чтобы увидеть отчет с исходным кодом и значениями покрытия кода.

Если вы хотите создавать отчеты о покрытии кода при каждом тестировании, вы можете установить следующую опцию в файле конфигурации CLI, angular.json:

"test": {
  "options": {
    "codeCoverage": true
  }
}

Демонстрация в реальном времени:

См. Перо mYXoyY от w3resource ( @ w3resource ) в CodePen .


Обеспечение покрытия кода

Процент покрытия кода позволяет оценить, сколько кода протестировано.

Если ваша команда выбирает минимальную сумму для тестирования, вы можете применить этот минимум с помощью Angular CLI.

Например, предположим, что вы хотите, чтобы база кода имела минимальное покрытие кода 80%. Чтобы включить это, откройте файл конфигурации тестовой платформы Karma, karma.conf.js, и добавьте следующее в ключ scopeIstanbulReporter: :.

coverageIstanbulReporter: {
  reports: [ 'html', 'lcovonly' ],
  fixWebpackSourcePaths: true,
  thresholds: {
    statements: 80,
    lines: 80,
    branches: 80,
    functions: 80
  }
}

Демонстрация в реальном времени:

См. Pen yWvwYb от w3resource ( @ w3resource ) в CodePen .


Свойство thresholds заставляет инструмент применять минимум 80% покрытия кода при запуске модульных тестов в проекте.

Сервисные тесты

Сервисы часто являются простейшими файлами для модульного тестирования. Вот некоторые синхронные и асинхронные модульные тесты ValueService, написанные без помощи утилит для тестирования Angular.

// Straight Jasmine testing without Angular's testing support
describe('ValueService', () => {
  let service: ValueService;
  beforeEach(() => { service = new ValueService(); });
  it('#getValue should return real value', () => {
    expect(service.getValue()).toBe('real value');
  });
  it('#getObservableValue should return value from observable',
    (done: DoneFn) => {
    service.getObservableValue().subscribe(value => {
      expect(value).toBe('observable value');
      done();
    });
  });
  it('#getPromiseValue should return value from a promise',
    (done: DoneFn) => {
    service.getPromiseValue().then(value => {
      expect(value).toBe('promise value');
      done();
    });
  });
});

Демонстрация в реальном времени:

См. Pen zQRbKW от w3resource ( @ w3resource ) в CodePen .


Сервисы с зависимостями

Сервисы часто зависят от других сервисов, которые Angular внедряет в конструктор. Во многих случаях легко создать и внедрить эти зависимости вручную при вызове конструктора службы.

MasterService является простым примером, как показано в фрагменте кода:

@Injectable()
export class MasterService {
  constructor(private valueService: ValueService) { }
  getValue() { return this.valueService.getValue(); }
}

Демонстрация в реальном времени:

См. Pen by LZge от w3resource ( @ w3resource ) в CodePen .


Основы тестирования компонентов

Компонент, в отличие от всех других частей приложения Angular, сочетает в себе шаблон HTML и класс TypeScript. Компонент действительно является шаблоном и классом, работающим вместе. и чтобы адекватно протестировать компонент, вы должны проверить, что они работают вместе, как предполагалось.

Такие тесты требуют создания хост-элемента компонента в DOM браузера, как это делает Angular, и изучения взаимодействия класса компонента с DOM, как описано в его шаблоне.

Angular TestBed облегчает этот вид тестирования, как вы увидите в следующих разделах. Но во многих случаях тестирование одного только компонента класса без участия DOM может проверить большую часть поведения компонента более простым и очевидным способом.

Тестирование класса компонентов

Протестируйте класс компонента самостоятельно, как если бы вы тестировали класс обслуживания. Рассмотрите этот LightswitchComponent в фрагменте кода ниже, который включает и выключает свет (представленный на экране сообщением), когда пользователь нажимает кнопку.

@Component({
  selector: 'lightswitch-comp',
  template: `
    <button (click)="clicked()">Click me!</button>
    <span>{{message}}</span>`
})
export class LightswitchComponent {
  isOn = false;
  clicked() { this.isOn = !this.isOn; }
  get message() { return `The light is ${this.isOn ? 'On' : 'Off'}`; }
}

Демонстрация в реальном времени:

См. Pen ZNrPMo от w3resource ( @ w3resource ) на CodePen .


Вы можете решить только проверить, что метод clicked () переключает состояние включения / выключения источника света и устанавливает сообщение соответствующим образом.

Этот класс компонентов не имеет зависимостей. Чтобы протестировать сервис без каких-либо зависимостей, вы создаете его с новым, ткните на его API и утверждаете ожидания в отношении его открытого состояния. Сделайте то же самое с классом компонента.

describe('LightswitchComp', () => {
  it('#clicked() should toggle #isOn', () => {
    const comp = new LightswitchComponent();
    expect(comp.isOn).toBe(false, 'off at first');
    comp.clicked();
    expect(comp.isOn).toBe(true, 'on after click');
    comp.clicked();
    expect(comp.isOn).toBe(false, 'off after second click');
  });
  it('#clicked() should set #message to "is on"', () => {
    const comp = new LightswitchComponent();
    expect(comp.message).toMatch(/is off/i, 'off at first');
    comp.clicked();
    expect(comp.message).toMatch(/is on/i, 'on after clicked');
  });
});

Демонстрация в реальном времени:

См. Pen mYXoQV от w3resource ( @ w3resource ) в CodePen .


Тестирование компонентов DOM

Тестирование класса компонента так же просто, как тестирование сервиса. Но компонент - это больше, чем просто его класс. Компонент взаимодействует с DOM и другими компонентами. Тесты только для класса могут рассказать вам о поведении класса. Они не могут сказать вам, будет ли компонент правильно отображаться, реагировать на пользовательский ввод и жесты или интегрироваться со своими родительскими и дочерними компонентами.

Ни один из приведенных выше тестов только для классов не может ответить на ключевые вопросы о том, как компоненты на самом деле ведут себя на экране.

  • Связан ли Lightswitch.clicked () с чем-либо таким, чтобы пользователь мог его вызвать?
  • Отображается ли Lightswitch.message?
  • Может ли пользователь фактически выбрать героя, отображаемого DashboardHeroComponent?
  • Имя героя отображается так, как ожидается (то есть в верхнем регистре)?
  • Отображается ли приветственное сообщение по шаблону WelcomeComponent?

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

Чтобы ответить на такие вопросы, вам нужно создать элементы DOM, связанные с компонентами, вы должны проверить DOM, чтобы убедиться, что состояние компонента отображается правильно в соответствующее время, и вы должны смоделировать взаимодействие пользователя с экраном, чтобы определить, являются ли эти взаимодействия заставить компонент вести себя как ожидалось.

Предыдущий: Angular Language Service
Далее: Угловое управление версиями и релизы

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code