Ich habe angefangen, mit CodeceptJs herumzuspielen, und ich habe es funktioniert ziemlich leicht. Ich benutze es gerade mit NightmareJs und alles scheint in Ordnung zu sein.Umgang mit Behauptungen in einem benutzerdefinierten Helfer
Der spezifische Bereich, den ich testen möchte, ist eine Galerie, die Daten von einer Schnittstelle über JSONP abruft und eine Liste von Bildern erstellt, die in <div>
s verpackt sind.
Ein Teil der Tests ist, dass ich die Umsetzung wie folgt aus:
Feature('gallery')
Scenario('clicking on an element adds "selected" class', (I) => {
I.amOnPage('/')
I.seeElement('#gallery .col-md-3')
I.click('#gallery .col-md-3')
I.seeElement('#gallery .selected')
})
Nun, da die Elemente beliebig viele sein können, ist es zur Zeit still um das erste Element verwendet wird, sondern um es zu geben, ein bisschen mehr Entropie ich wollte ein Element zufällig, so etwas wie die folgenden
Scenario('clicking on an element adds "selected" class', (I) => {
I.amOnPage('/')
I.seeMoreThanElements('#gallery .col-md-3', 1)
I.clickOnRandomElement('#gallery .col-md-3')
I.seeElement('#gallery .selected')
})
Oder noch besser holen, wenn ich die Liste der Elemente greifen könnte, damit ich, was man zu klicken Sie auf, wie entscheiden kann:
Scenario('clicking on an element adds "selected" class', (I) => {
I.amOnPage('/')
I.seeMoreThanElements('#gallery .col-md-3', 1)
const elements = I.grabRandomElement('#gallery .col-md-3')
const random = getRandomInt(1, elements.length)
I.click(`#gallery .col-md-3:nth-child(${random})`)
I.seeElement(`#gallery .col-md-3.selected:nth-child(${random})`)
})
Die aktuellen Helfer mir nicht erlauben, zur Verfügung haben einige bestimmte Aktionen auszuführen, so begann ich einen benutzerdefinierten Handler Implementierung wie bei http://codecept.io/helpers/
In meiner Konfiguration Ich habe folgendes in der Anleitung beschrieben:
"helpers": {
"Nightmare": {
"url": "http://localhost:3000"
},
"DOMElements": {
"require": "./__tests__/helpers/domelements_helper.js"
}
}
und domelements_helper.js
sieht derzeit wie folgt aus:
'use strict'
let assert = require('assert')
class DOMElements extends Helper {
seeMoreThanElements (locator, count) {
this.helpers['Nightmare']._locate(locator).then(function (els) {
return assert(els.length >= count, `Found more than ${count} elements`)
})
}
}
module.exports = DOMElements
Dieses doesn 't - klar - arbeiten. Dies ist, wo ich ein bisschen verwirrt bin.
Als Erstes benutze ich die Standard-Node.js-Assertion-Bibliothek, und wenn es nötig ist, bin ich glücklich, zu etwas Robusterem wie dem Protractor oder Chai-wie versprochen zu wechseln, aber je schlanker desto besser .
Zweitens ist die Dokumentation eindeutig besagt Folgendes:
jeder Hilfsmethode Wert hinzugefügt, um zurückkehren sollte Kette
versprechen, die nicht wirklich Sinn macht ... sollte ich ein Versprechen zurückgeben oder sollte ich die ganze Sache innerhalb der then()
Anweisung behandeln? Die Rückgabe eines Basiswertes ist nicht wirklich viel. Wie gehe ich selbst dann mit fehlgeschlagenen Assertions um?
Ich habe auch ein Nightmare-Clientskript in der Codebasis gesehen, aber ich habe keine Ahnung, ob es für meinen Fall von Nutzen ist, da ich grade durch die Codebasis gegraben habe, um ein bisschen besser zu verstehen um CodeceptJs anzupassen und zu erweitern.
Alle Hinweise sind wirklich zu schätzen