Das Modifizieren eines Fensterobjekts durch Cypress im Test führt dazu, dass cy.window() im nächsten Test undefiniert wiJavaScript

Javascript-Forum
Guest
 Das Modifizieren eines Fensterobjekts durch Cypress im Test führt dazu, dass cy.window() im nächsten Test undefiniert wi

Post by Guest »

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post