Dieser Test ist extrem einfach und sollte unkompliziert sein … aber …
Eine Plugin-Einstellung ändert sich von dem, was ich eingerichtet habe.
Wenn das JavaScript als Ergebnis des Ladens des Komponisten ausgeführt wird, ist der früher im Akzeptanzblock gesetzte Einstellungswert nicht mehr derselbe!
Er sollte “user” sein, wie im Testcode festgelegt, aber wenn er in der Konsole protokolliert wird, sehe ich Folgendes, und deshalb schlägt der Test fehl:
Ich habe das lokal ausprobiert. Es scheint, dass mehrere Faktoren eine Rolle spielen:
Das siteSettings-Objekt, auf das Sie verweisen, wird vom Initialisierer abgerufen und dann in einem modifyClass-Aufruf verwendet:
Initialisierer werden für jeden Test neu ausgeführt. Das Problem ist, dass wir keine Möglichkeit haben, modifyClass-Aufrufe, die von früheren Tests gemacht wurden, zurückzusetzen. Unsere Lösung ist der pluginId-Parameter – er bedeutet, dass nur der erste modifyClass-Aufruf in der gesamten Testsuite tatsächlich verwendet wird. Aufrufe von modifyClass aus Initialisierern in zukünftigen Tests werden ignoriert.
Normalerweise ist das in Ordnung – Code innerhalb einer modifyClass-Aufrufung ändert sich in der Regel nicht bei jedem Testlauf. In diesem Fall verweisen Sie jedoch auf die siteSettings-Referenz aus dem Gültigkeitsbereich des Initialisierers.
Das tl;dr hier ist: In Tests bedeutet diese Implementierung, dass modifyClass mit den Site-Einstellungen aus dem Test, der als erster ausgeführt wurde, feststecken wird.
Die Lösung besteht darin, eine siteSettings-Referenz zur Laufzeit anstelle zur Initialisierungszeit zu verwenden. Wir können die aus model:composer selbst verwenden. Dieser Diff lässt die Tests für mich erfolgreich durchlaufen:
Es gibt hier ein weiteres Problem, das ich aus demselben Grund vermute:
currentUser ist auch im Initialisierer definiert.
Wenn der falsche Test als zweites ausgeführt wird, wird dieser ausgewertet und ist nicht mehr definiert, sodass die Tests, wenn sie zusammen ausgeführt werden, “die Hälfte” der Zeit fehlschlagen können.
Ich denke, das Composer-Modell hat user, also werde ich darauf umsteigen …