Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
VAN TOEPASSING OP: Ontwikkelaar | Basic | Basic v2 | Standaard | Standard v2 | Premium | Premium v2
In dit artikel wordt uitgelegd hoe u eenheidstests en end-to-end tests instelt voor uw zelf-hostende portal.
Unittests
Een eenheidstest is een methode om kleine stukjes functionaliteit te valideren. Het wordt geïsoleerd van andere onderdelen van de toepassing.
Voorbeeldscenario
In dit scenario test u een besturingselement voor wachtwoordinvoer. Het accepteert alleen wachtwoorden met ten minste:
Eén letter
Eén getal
Eén speciaal teken
De test om deze vereisten te valideren ziet er als volgt uit:
const passwordInput = new PasswordInput();
passwordInput.value = "";
expect(passwordInput.isValid).to.equal(false);
passwordInput.value = "password";
expect(passwordInput.isValid).to.equal(false);
passwordInput.value = "p@ssw0rd";
expect(passwordInput.isValid.to.equal(true);
Projectstructuur
Het is gebruikelijk om een eenheidstest naast het onderdeel te houden dat moet worden gevalideerd.
component.ts
component.spec.ts
Gesimuleerde HTTP-aanvragen
Er zijn gevallen waarin u verwacht dat een onderdeel HTTP-aanvragen doet. Het onderdeel moet op de juiste manier reageren op verschillende soorten reacties. Als u specifieke HTTP-antwoorden wilt simuleren, gebruikt u MockHttpClient
. Hiermee wordt de HttpClient
interface geïmplementeerd die door veel andere onderdelen van het project wordt gebruikt.
const httpClient = new MockHttpClient();
httpClient.mock()
.get("/users/jane")
.reply(200, {
firstName: "Jane",
lastName: "Doe"
});
Complete tests
Een end-to-end-test voert een bepaald gebruikersscenario uit met exacte stappen die de gebruiker verwacht uit te voeren. In een webtoepassing zoals de Azure API Management-ontwikkelaarsportal bladert de gebruiker door de inhoud en selecteert de opties om bepaalde resultaten te bereiken.
Als u gebruikersnavigatie wilt repliceren, kunt u helperbibliotheken voor browserbewerkingen zoals Puppeteer gebruiken. Hiermee kunt u gebruikersacties simuleren en veronderstelde scenario's automatiseren. Puppeteer maakt ook automatisch schermopnamen van pagina's of onderdelen in een fase van de test. Vergelijk ze later met eerdere resultaten om afwijkingen en potentiële regressies te vangen.
Voorbeeldscenario
In dit scenario moet u een aanmeldingsstroom voor gebruikers valideren. Voor dit scenario zijn de volgende stappen vereist:
Open de browser en navigeer naar de aanmeldingspagina.
Voer het e-mailadres in.
Voer het wachtwoord in.
Selecteer Aanmelden.
Controleer of de gebruiker is omgeleid naar de startpagina.
Controleer of de pagina de menuopdracht Profiel bevat. Het is een van de mogelijke indicatoren waarmee u zich hebt aangemeld.
Als u de test automatisch wilt uitvoeren, maakt u een script met exact dezelfde stappen:
// 1. Open browser and navigate to the sign-in page.
const page = await browser.newPage();
await page.goto("https://contoso.com/signin");
// 2. Enter email.
await this.page.type("#email", "john.doe@contoso.com");
// 3. Enter password.
await this.page.type("#password", "p@s$w0rd");
// 4. Click Sign-in.
await this.page.click("#signin");
// 5. Verify that user got redirected to Home page.
expect(page.url()).to.equal("https://contoso.com");
// 6. Verify that the page includes the Profile menu item.
const profileMenuItem = await this.page.$("#profile");
expect(profileMenuItem).not.equals(null);
Notitie
Tekenreeksen zoals '#email', '#password' en '#signin' zijn CSS-achtige selectors die HTML-elementen op de pagina identificeren. Zie de W3C-specificatie selectors op niveau 3 voor meer informatie.
Toewijzingen van ui-onderdelen
Gebruikersstromen doorlopen vaak dezelfde pagina's of onderdelen. Een goed voorbeeld is het hoofdwebsitemenu dat op elke pagina aanwezig is.
Maak een ui-onderdeeltoewijzing om te voorkomen dat dezelfde selectors voor elke test worden geconfigureerd en bijgewerkt. U kunt bijvoorbeeld stap 2 tot en met 6 in het voorgaande voorbeeld vervangen door slechts twee regels:
const signInWidget = new SigninBasicWidget(page);
await signInWidget.signInWithBasic({ email: "...", password: "..." });
Testconfiguratie
Voor bepaalde scenario's zijn mogelijk vooraf gemaakte gegevens of configuratie vereist. U moet bijvoorbeeld gebruikersaanmelding automatiseren met sociale media-accounts. Het is moeilijk om die gegevens snel of eenvoudig te maken.
Hiervoor kunt u een speciaal configuratiebestand toevoegen aan uw testscenario. De testscripts kunnen vereiste gegevens uit het bestand ophalen. Afhankelijk van de build- en testpijplijn kunnen de tests de geheimen ophalen uit een benoemd beveiligd archief.
Hier volgt een voorbeeld van een validate.config.json
bestand dat wordt opgeslagen in de src
map van uw project.
{
"environment": "validation",
"urls": {
"home": "https://contoso.com",
"signin": "https://contoso.com/signin",
"signup": "https://contoso.com/signup/"
},
"signin": {
"firstName": "John",
"lastName": "Doe",
"credentials": {
"basic": {
"email": "johndoe@contoso.com",
"password": "< password >"
},
"aadB2C": {
"email": "johndoe@contoso.com",
"password": "< password >"
}
}
},
"signup": {
"firstName": "John",
"lastName": "Doe",
"credentials": {
"basic": {
"email": "johndoe@contoso.com",
"password": "< password >"
}
}
}
}
Headless versus normale tests
Met moderne browsers zoals Chrome of Microsoft Edge kunt u automatisering uitvoeren in zowel de headless-modus als de normale modus. De browser werkt zonder een grafische gebruikersinterface in de modus zonder hoofd. Er worden nog steeds dezelfde pagina- en DOM-bewerkingen (Document Object Model) uitgevoerd. De gebruikersinterface van de browser is meestal niet nodig in leveringspijplijnen. In dat geval is het uitvoeren van tests in de headless-modus een uitstekende optie.
Wanneer u een testscript ontwikkelt, is het handig om te zien wat er precies gebeurt in de browser. Dat is een goed moment om de normale modus te gebruiken.
Als u wilt schakelen tussen de modi, wijzigt u de optieoptie headless
in het constants.ts
bestand. Deze bevindt zich in de tests
map in uw project:
export const LaunchOptions = {
headless: false
};
Een andere handige optie is slowMo
. Hiermee wordt de uitvoering van de test tussen elke actie onderbroken:
export const LaunchOptions = {
slowMo: 200 // milliseconds
};
Tests uitvoeren
Er zijn twee ingebouwde manieren om tests in dit project uit te voeren:
npm-opdracht
npm run test
Test Explorer
De Test Explorer-extensie voor VS Code (bijvoorbeeld Mocha Test Explorer) heeft een handige gebruikersinterface en een optie om automatisch tests uit te voeren bij elke wijziging van de broncode:
Volgende stappen
Meer informatie over de ontwikkelaarsportal: