J'ai une classe Spock qui, lorsqu'elle est exécutée en tant que suite de tests, lance Unable to resolve iconRow as content for geb.Page, or as a property on its Navigator context. Is iconRow a class you forgot to import?
sauf si j'annote ma classe avec @Stepwise. Cependant, je vraiment ne veux pas que l'exécution du test s'arrête sur le premier échec, ce que fait @Stepwise.La classe ne peut pas résoudre le module en tant que contenu sauf si @Stepwise est utilisé
J'ai essayé d'écrire (copier et coller) ma propre extension en utilisant this post, mais je reçois toujours ces erreurs. Il utilise mon extension, comme j'ai ajouté quelques instructions de journalisation qui ont été imprimées sur la console.
Voici un de mes modules:
class IconRow extends Module {
static content = {
iconRow (required: false) {$("div.report-toolbar")}
}
}
Et une page qui l'utilise:
class Report extends SomeOtherPage {
static at = {$("div.grid-container").displayed}
static content = {
iconRow { module IconRow }
}
}
Et un extrait du test qui échoue:
class MyFailingTest extends GebReportingSpec {
def setupSpec() {
via Dashboard
SomeClass.login("SourMonk", "myPassword")
assert page instanceof Dashboard
nav.goToReport("Some report name")
assert page instanceof Report
}
@Unroll
def "I work"() {
given:
at Report
expect:
this == that
where:
this << ["some list", "of values"]
that << anotherModule.someContent*[email protected]
}
@Unroll
def "I don't work"() {
given:
at Report
expect:
this == that
where:
this << ["some other", "list", "of values"]
that << iconRow.columnHeaders*.attr("innerText")*.toUpperCase()
}
}
Lorsque exécuté en tant que suite I work
passe et I don't work
échoue car il ne peut pas identifier "iconRow" comme contenu pour la page. Si je change l'ordre des cas de test, I don't work
passera et I work
échouera. Sinon, si j'exécute chaque test séparément, ils passent tous les deux.
Ce que j'ai essayé:
- Ajout/suppression de la
required: true
propriété du contenu des modules - préfixant le nom du module avec la classe, comme
IconRow.iconRow
- Définir mes modules
@Shared
statiques propriétés - Initialiser les modules à la fois dans et en dehors de mon
setupSpec()
- thodes dans la classe de chaque module qui renvoient le module et le référencement de contenus tels que
IconRow.getIconRow().columnHeaders*.attr("innerText")*.toUpperCase()
- déplacer le contenu de mon
setupSpec()
danssetup()
- Ajout
autoClearCookies = false
dans mon GebConfig.groovy - Faire une variable et le préfixe
@Shared Report report
tous les modules avec cette tels quereport.iconRow
Note très particulière à ce sujet dernier point - il se résout comme par magie les modules qui se font pas le préfixe - il ne résoudra pas report.IconRow
mais résoudra juste iconRow
- absolument bizarre, parce que si je supprime cette variable, le module qui fonctionnait tout à coup auparavant ne peut pas être résolu à nouveau. J'ai même essayé de déclarer cette variable et de ne rien préfixer, ce qui n'a pas fonctionné non plus.
Un autre problème que je continue à frapper ma tête contre le mur avec est que je ne suis pas sûr de où le problème est. L'erreur qu'il génère me porte à croire qu'il s'agit d'un problème de configuration de projet, mais l'exécution de chaque fonctionnalité fonctionne parfaitement, de sorte qu'il semble résoudre les classes très bien. D'autre part, c'est peut-être un problème avec la session et/ou les cookies?Bien que je n'ai encore vu aucune documentation officielle à ce sujet, il semble y avoir un consensus général (d'autres articles et articles que j'ai lus) que l'utilisation de @Stepwise
maintiendra votre session entre les méthodes d'entités. Si tel est le cas, pourquoi mon extension ne fonctionne-t-elle pas? C'est à peu près un copier-coller de @Stepwise
sans la méthode skipFeaturesAfterFirstFailingFeature
(je peux poster si nécessaire), à moins qu'il y ait d'autres choses qui se passent dans les coulisses avec @Stepwise
. Excuses pour le mur de texte, mais j'ai essayé de comprendre ceci pendant environ 6 heures maintenant, ainsi mon cerveau est assez frit.
J'ai donc essayé de déplacer le contenu de mon setupSpec() à installer juste() et les essais sont encore défaillants, avec la même erreur. Y a-t-il moyen de surcharger ces méthodes dans GebSpec? – SourMonk
@SourMonk J'ai mis à jour la réponse –
Merci, Leonard qui travaille pour moi - je suppose que j'ai eu un simple malentendu sur le framework. Alors qu'est-ce qui permet d'accéder aux objets Geb dans 'attendez' mais pas 'où'? – SourMonk