Inhaltsverzeichnis
Konfigurationsskript
Heim Web-Frontend js-Tutorial Wie richte ich eine Testumgebung ein? Einführung in das Angular-Testtoolset

Wie richte ich eine Testumgebung ein? Einführung in das Angular-Testtoolset

Aug 22, 2020 am 11:16 AM
angular 单元测试

Wie richte ich eine Testumgebung ein? Einführung in das Angular-Testtoolset

In diesem Artikel wird erläutert, wie man eine Testumgebung und das Angular-Testtool-Set erstellt.

Testumgebung

Die meisten von ihnen verwenden Angular Cli, um Projekte zu erstellen. Daher sind die von uns benötigten NPM-Pakete und Skripte standardmäßig integriert. Wenn Sie einen selbst erstellten oder offiziellen Website-Schnellstart verwenden, benötigen Sie dies natürlich Selbstinstallation; alle Kerndaten sind jedoch gleich. [Verwandte Tutorial-Empfehlungen: Angular-Tutorial]

Angular-Unit-Tests können in zwei Kategorien unterteilt werden: unabhängige Einzeltests und Angular-Test-Toolset.

Pipe und Service eignen sich für unabhängige Tests, da sie nur new Instanzklassen erfordern und auch nicht in der Lage sind, mit Angular-Komponenten zu interagieren.

Das Gegenteil ist das Angular-Testtoolset.

Einführung in das Testing Framework

Jasmine

Das Jasmine Test Framework bietet einen Werkzeugsatz zum Schreiben von Testskripten und seine hervorragende Semantik lässt den Testcode so aussehen, als würde er einen Absatz lesen.

Karma

Es gibt Testskripte, und Karma wird benötigt, um bei der Verwaltung dieser Skripte zu helfen, damit sie im Browser ausgeführt werden können.

Npm-Paket

Wenn Sie damit herumspielen müssen, ist es am einfachsten, ein neues Projekt über Angular Cli zu erstellen und dann das folgende Npm-Paket in das Projekt zu kopieren, mit dem Sie herumspielen.

    "jasmine-core": "~2.5.2",
    "jasmine-spec-reporter": "~3.2.0",
    "karma": "~1.4.1",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-coverage-istanbul-reporter": "^0.2.0"
Nach dem Login kopieren

Dann ist es für uns am wichtigsten, uns den Teil mit dem Konfigurationsskript anzusehen.

Konfigurationsskript

Unser Kern besteht darin, den Karma-Läufer zum Laufen zu bringen, und für Jasmine wird es verwendet, wenn wir Testskripte schreiben, sodass wir uns vorerst keine allzu großen Sorgen machen müssen.

Wir müssen karma.conf.js Dateien im Stammverzeichnis erstellen, was einigen Konventionen entspricht. Die Datei soll Karma darüber informieren, welche Plug-Ins aktiviert werden müssen, welche Testskripte geladen werden müssen, welche Testbrowserumgebungen erforderlich sind, welche Methoden zur Benachrichtigung von Testberichten, Protokolle usw. erforderlich sind.

karma.conf.js

Das Folgende ist die standardmäßig von Angular Cli bereitgestellte Karma-Konfigurationsdatei:

// Karma configuration file, see link for more information
// https://karma-runner.github.io/0.13/config/configuration-file.html

module.exports = function(config) {
    config.set({
        // 基础路径(适用file、exclude属性)
        basePath: '',
        // 测试框架,@angular/cli 指Angular测试工具集
        frameworks: ['jasmine', '@angular/cli'],
        // 加载插件清单
        plugins: [
            require('karma-jasmine'),
            require('karma-chrome-launcher'),
            require('karma-jasmine-html-reporter'),
            require('karma-coverage-istanbul-reporter'),
            require('@angular/cli/plugins/karma')
        ],
        client: {
            // 当测试运行完成后是否清除上文
            clearContext: false // leave Jasmine Spec Runner output visible in browser
        },
        // 哪些文件需要被浏览器加载,后面会专门介绍  `test.ts`
        files: [
            { pattern: './src/test.ts', watched: false }
        ],
        // 允许文件到达浏览器之前进行一些预处理操作
        // 非常丰富的预处理器:https://www.npmjs.com/browse/keyword/karma-preprocessor
        preprocessors: {
            './src/test.ts': ['@angular/cli']
        },
        // 指定请求文件MIME类型
        mime: {
            'text/x-typescript': ['ts', 'tsx']
        },
        // 插件【karma-coverage-istanbul-reporter】的配置项
        coverageIstanbulReporter: {
            // 覆盖率报告方式
            reports: ['html', 'lcovonly'],
            fixWebpackSourcePaths: true
        },
        // 指定angular cli环境
        angularCli: {
            environment: 'dev'
        },
        // 测试结果报告方式
        reporters: config.angularCli && config.angularCli.codeCoverage ?
            ['progress', 'coverage-istanbul'] :
            ['progress', 'kjhtml'],
        port: 9876,
        colors: true,
        // 日志等级
        logLevel: config.LOG_INFO,
        // 是否监听测试文件
        autoWatch: true,
        // 测试浏览器列表
        browsers: ['Chrome'],
        // 持续集成模式,true:表示浏览器执行测试后退出
        singleRun: false
    });
};
Nach dem Login kopieren

Die obige Konfiguration kann grundsätzlich unsere Anforderungen erfüllen. Im Allgemeinen muss die Liste der Testbrowser geändert werden. denn Karma unterstützt alle Browser auf dem Markt. Wenn Sie die kontinuierliche Integration von Travis CI verwenden, erspart uns außerdem das Starten eines Chrome-Browsers mit einer deaktivierten Sandbox-Umgebung eine Menge Dinge:

        customLaunchers: {
            Chrome_travis_ci: {
                base: 'Chrome',
                flags: ['--no-sandbox']
            }
        }
Nach dem Login kopieren

Alle Informationen zu Karma-Konfigurationsdateien finden Sie in der offiziellen Website-Dokumentation.

test.ts

Beim Schreiben von karma.conf.js haben wir die vom Browser geladene Datei so konfiguriert, dass sie auf die ./src/test.ts-Datei verweist. Die Funktion besteht darin, Karma zum Starten zu führen, und der Code ist viel einfacher:

// This file is required by karma.conf.js and loads recursively all the .spec and framework files

import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
import { getTestBed } from '@angular/core/testing';
import {
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';

// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
declare var __karma__: any;
declare var require: any;

// Prevent Karma from running prematurely.
__karma__.loaded = function () {};

// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting()
);
// Then we find all the tests.
// 所有.spec.ts文件
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
// Finally, start Karma to run the tests.
__karma__.start();
Nach dem Login kopieren

Nachdem alles fertig ist, können wir versuchen, Karma zu starten und es auszuprobieren. Auch ohne Testcode kann es noch ausgeführt werden.

Wenn es Angular Cli ist, dann ng test. Es ist einfach zu bedienen node "./node_modules/karma-cli/bin/karma" start

Öffnen Sie abschließend den Browser: http://localhost:9876, um den Testbericht anzuzeigen.

Einfaches Beispiel

Nachdem die Umgebung eingerichtet ist, schreiben wir zum Ausprobieren ein einfaches Beispiel.

Erstellen Sie ./src/demo.spec.tsDateien. .spec.ts ist ein Suffix. Dies ist eine Konvention, befolgen Sie sie.

describe('demo test', () => {
    it('should be true', () => {
        expect(true).toBe(true);
    })
});
Nach dem Login kopieren

Nach dem Ausführen von ng test können wir in der Konsole sehen:

Chrome 58.0.3029 (Windows 10 0.0.0): Executed 1 of 1 SUCCESS (0.031 secs / 0.002 secs)
Nach dem Login kopieren

oder im Browser:

1 spec, 0 failures
demo test
  true is true
Nach dem Login kopieren

Egal was passiert, schließlich sind wir in die Welt des Angular-Unit-Tests eingetreten.

Angular-Testtool-Set

Gewöhnliche Klassen wie Pipe oder Service müssen nur Instanzen über ein einfaches new erstellen. Für Anweisungen und Komponenten ist eine bestimmte Umgebung erforderlich. Dies liegt am Modulkonzept von Angular. Wenn Sie möchten, dass eine Komponente ausgeführt wird, müssen Sie zunächst eine @NgModule-Definition haben.

Das Werkzeugset enthält nicht viele Informationen und Sie können es leicht beherrschen. Im Folgenden werde ich einige der am häufigsten verwendeten kurz erläutern:

TestBed

TestBed wird vom Angular-Testtoolset zum Erstellen eines @NgModule Testumgebungsmoduls bereitgestellt. Natürlich müssen Sie mit dem Modul auch TestBed.createComponent verwenden, um eine Testkomponente zum Testen der Zielkomponente zu erstellen.

Asynchronous

Asynchronous ist überall in Angular, und beim asynchronen Testen können die Tools async, fakeAsync verwendet werden, um eleganten Testcode zu schreiben, der synchron aussieht.

Es gibt weitere Tools im Tool-Set, die wir alle einzeln in [Angular Unit Testing – Component and Instruction Unit Testing]() erklären.

Viel Spaß beim Codieren!

Das obige ist der detaillierte Inhalt vonWie richte ich eine Testumgebung ein? Einführung in das Angular-Testtoolset. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Unit-Test-Praktiken für Schnittstellen und abstrakte Klassen in Java Unit-Test-Praktiken für Schnittstellen und abstrakte Klassen in Java May 02, 2024 am 10:39 AM

Schritte zum Unit-Testen von Schnittstellen und abstrakten Klassen in Java: Erstellen Sie eine Testklasse für die Schnittstelle. Erstellen Sie eine Scheinklasse, um die Schnittstellenmethoden zu implementieren. Verwenden Sie die Mockito-Bibliothek, um Schnittstellenmethoden zu verspotten und Testmethoden zu schreiben. Die abstrakte Klasse erstellt eine Testklasse. Erstellen Sie eine Unterklasse einer abstrakten Klasse. Schreiben Sie Testmethoden, um die Korrektheit abstrakter Klassen zu testen.

Der Unterschied zwischen Leistungstests und Unit-Tests in der Go-Sprache Der Unterschied zwischen Leistungstests und Unit-Tests in der Go-Sprache May 08, 2024 pm 03:09 PM

Leistungstests bewerten die Leistung einer Anwendung unter verschiedenen Lasten, während Komponententests die Korrektheit einer einzelnen Codeeinheit überprüfen. Leistungstests konzentrieren sich auf die Messung von Antwortzeit und Durchsatz, während Unit-Tests sich auf Funktionsausgabe und Codeabdeckung konzentrieren. Leistungstests simulieren reale Umgebungen mit hoher Last und Parallelität, während Unit-Tests unter niedrigen Last- und seriellen Bedingungen ausgeführt werden. Das Ziel von Leistungstests besteht darin, Leistungsengpässe zu identifizieren und die Anwendung zu optimieren, während das Ziel von Unit-Tests darin besteht, die Korrektheit und Robustheit des Codes sicherzustellen.

Analyse der Vor- und Nachteile von PHP-Unit-Test-Tools Analyse der Vor- und Nachteile von PHP-Unit-Test-Tools May 06, 2024 pm 10:51 PM

Analyse des PHP-Unit-Test-Tools: PHPUnit: Geeignet für große Projekte, bietet umfassende Funktionalität und ist einfach zu installieren, kann jedoch ausführlich und langsam sein. PHPUnitWrapper: geeignet für kleine Projekte, einfach zu verwenden, optimiert für Lumen/Laravel, verfügt jedoch über eingeschränkte Funktionalität, bietet keine Code-Coverage-Analyse und hat begrenzte Community-Unterstützung.

Wie verwende ich die tabellengesteuerte Testmethode beim Golang-Unit-Testen? Wie verwende ich die tabellengesteuerte Testmethode beim Golang-Unit-Testen? Jun 01, 2024 am 09:48 AM

Tabellengesteuertes Testen vereinfacht das Schreiben von Testfällen beim Go-Unit-Testen, indem Eingaben und erwartete Ausgaben über Tabellen definiert werden. Die Syntax umfasst: 1. Definieren Sie ein Segment, das die Testfallstruktur enthält. 2. Durchlaufen Sie das Segment und vergleichen Sie die Ergebnisse mit der erwarteten Ausgabe. Im tatsächlichen Fall wurde ein tabellengesteuerter Test für die Funktion zum Konvertieren von Zeichenfolgen in Großbuchstaben durchgeführt. Mit gotest wurde der Test ausgeführt und das bestandene Ergebnis gedruckt.

Was ist der Unterschied zwischen Unit-Tests und Integrationstests beim Golang-Funktionstest? Was ist der Unterschied zwischen Unit-Tests und Integrationstests beim Golang-Funktionstest? Apr 27, 2024 am 08:30 AM

Unit-Tests und Integrationstests sind zwei verschiedene Arten von Go-Funktionstests, mit denen die Interaktion und Integration einer einzelnen Funktion bzw. mehrerer Funktionen überprüft wird. Unit-Tests testen nur die Grundfunktionalität einer bestimmten Funktion, während Integrationstests die Interaktion zwischen mehreren Funktionen und die Integration mit anderen Teilen der Anwendung testen.

PHP-Unit-Tests: So entwerfen Sie effektive Testfälle PHP-Unit-Tests: So entwerfen Sie effektive Testfälle Jun 03, 2024 pm 03:34 PM

Es ist von entscheidender Bedeutung, effektive Unit-Testfälle zu entwerfen und dabei die folgenden Prinzipien einzuhalten: atomar, prägnant, wiederholbar und eindeutig. Die Schritte umfassen: Bestimmen des zu testenden Codes, Identifizieren von Testszenarien, Erstellen von Behauptungen und Schreiben von Testmethoden. Der praktische Fall demonstriert die Erstellung von Testfällen für die Funktion max() und betont dabei die Bedeutung spezifischer Testszenarien und Behauptungen. Durch Befolgen dieser Prinzipien und Schritte können Sie die Qualität und Stabilität des Codes verbessern.

PHP-Unit-Tests: Tipps zur Erhöhung der Codeabdeckung PHP-Unit-Tests: Tipps zur Erhöhung der Codeabdeckung Jun 01, 2024 pm 06:39 PM

So verbessern Sie die Codeabdeckung beim PHP-Unit-Test: Verwenden Sie die Option --coverage-html von PHPUnit, um einen Abdeckungsbericht zu erstellen. Verwenden Sie die setAccessible-Methode, um private Methoden und Eigenschaften zu überschreiben. Verwenden Sie Behauptungen, um boolesche Bedingungen zu überschreiben. Gewinnen Sie zusätzliche Einblicke in die Codeabdeckung mit Codeüberprüfungstools.

Integration von PHP Unit Testing und Continuous Delivery Integration von PHP Unit Testing und Continuous Delivery May 06, 2024 pm 06:45 PM

Zusammenfassung: Durch die Integration des Unit-Testing-Frameworks PHPUnit und der CI/CD-Pipeline können Sie die Qualität des PHP-Codes verbessern und die Softwarebereitstellung beschleunigen. PHPUnit ermöglicht die Erstellung von Testfällen zur Überprüfung der Komponentenfunktionalität, und CI/CD-Tools wie GitLabCI und GitHubActions können diese Tests automatisch ausführen. Beispiel: Validieren Sie den Authentifizierungscontroller mit Testfällen, um sicherzustellen, dass die Anmeldefunktion wie erwartet funktioniert.

See all articles