Ich habe eine Testsuite in cypress.js, in der ich vor jedem Test eine bestimmte Datenbank aus indexedDB lösche:
Code: Select all
beforeEach(() => {
cy.window().then(win => win.indexedDB.deleteDatabase('test_db'));
});
In jedem Test verwende ich einen benutzerdefinierten Befehl, der bestimmte Eigenschaften des Fensterobjekts stoppt:
Code: Select all
Cypress.Commands.add('stubDevice', () => {
Cypress.on('window:before:load', win => {
// @ts-expect-error TS does not recognize userAgentData global variable
const userAgentData = { ...win.navigator.userAgentData };
const mockedUserAgentData = {
...userAgentData,
mobile: true,
}
Object.defineProperty(win.navigator, 'userAgentData', {
value: mockedUserAgentData,
configurable: true,
});
});
});
Wenn die Testsuite ausgeführt wird, funktioniert der erste Test einwandfrei, jedoch löst jeder Rückruf vor dem zweiten Test einen Fehler aus. Eigenschaften von undefiniert können nicht gelesen werden (liest „indexedDB“). Es sieht so aus, als ob cy.window() undefiniert ergibt und es scheint, dass die Verwendung von defineProperty für win.navigator ein Problem darstellt, denn wenn ich diesen Teil des benutzerdefinierten Befehls auskommentiere, funktioniert beforeEach-Rückruf vor jedem Test einwandfrei. Warum passiert das und wie kann ich das verhindern?