Ich versuche vor jedem Test ein programmgesteuertes Login mit Cypress durchzuführen. Meine Token bleiben in localStorage erhalten. Wenn ich es synchron ändere, dh einfach zu tun, localStorage.setItem
ohne cy.request
es einzubeziehen, funktioniert es einwandfrei . Ich möchte jedoch meinen Authentifizierungsserver ( http://localhost:3004/login
unten) verwenden, um Token zu generieren.
Das Token wird korrekt vom Server abgerufen, aber sobald ich den folgenden Befehl zusammen mit cy.visit('/')
"Fehler beim Besuch von localhost: 8080 - Wir haben versucht, eine http-Anfrage an diese URL zu senden, aber die Anfrage ist ohne Antwort fehlgeschlagen" erhalte (siehe vollständiges Protokoll unten).
Soweit ich das beurteilen kann, ist dies der richtige Ansatz, wenn ein Authentifizierungsserver für die kopflose Authentifizierung verwendet wird. Was habe ich verpasst?
befehle.js
Cypress.Commands.add('login', () => {
cy.request({
method: 'POST',
url: `http://localhost:3004/login`,
body: {
username: 'foo@bar.com',
password: '123'
}
}).its('body').then((body) => {
const vuexData = { user: { authenticationData: { token: body.token } } }
window.localStorage.setItem('vuex', JSON.stringify(vuexData))
})
})
test.js
describe('A test', () => {
beforeEach(() => {
cy.login()
})
it('works', () => {
cy.visit('/')
cy.get('h1').contains('All Books')
})
})
CypressError: cy.visit () konnte nicht laden:
Wir haben versucht, eine http-Anfrage an diese URL zu stellen, aber die Anfrage ist ohne Antwort fehlgeschlagen.
Wir haben diesen Fehler auf Netzwerkebene erhalten:
Fehler: ECONNREFUSED :: 1: 8080 verbinden
Häufige Situationen, in denen dies fehlschlagen würde: - Sie haben keinen Internetzugang - Sie haben vergessen, Ihren Webserver auszuführen / zu starten - Ihr Webserver ist nicht zugänglich - Sie haben seltsame Netzwerkkonfigurationseinstellungen auf Ihrem Computer
Die Stapelverfolgung für diesen Fehler lautet:
Fehler: Verbinden Sie ECONNREFUSED :: 1: 8080 unter TCPConnectWrap.afterConnect [als unvollständig] (net.js: 1056: 14)
http://localhost:8080
es funktioniert gut ohne den cy.request
im Login-Befehl
.its('body').then((body)
, it('works', () => {
und die Vue App mounted()
alles , was sie richtige Werte und Protokolle treten in der richtigen Reihenfolge haben (Schlagen typicode mit dem POST). Das einzige, was ich vorschlagen kann, ist, sich body
nach dem POST anzumelden und zu prüfen, ob es die richtige Form hat. Wie verwendet die Vue-App das Token?
baseUrl
in cypress.json eingestellt?