各テストの前にサイプレスでプログラムによるログインを試みています。私のトークンはlocalStorageに保持されます。私がそれを同期的に変更する場合、つまり、localStorage.setItem
関与せずに行う単純cy.request
な動作は正常に機能します。ただし、http://localhost:3004/login
トークンを生成するために私の認証サーバー(以下)を使用したいと思います。
トークンはサーバーから正しくフェッチされますが、以下のコマンドを使用してcy.visit('/')
「localhost:8080にアクセスできませんでした-このURLにhttpリクエストを送信しようとしましたが、リクエストが応答なしで失敗しました」(以下の完全なログ)。
私の知る限り、これはヘッドレス認証に認証サーバーを使用する場合の正しいアプローチです。私は何を取りこぼしたか?
commands.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()が読み込もうとして失敗しました:
このURLにhttpリクエストを送信しようとしましたが、リクエストが応答なしで失敗しました。
ネットワークレベルでこのエラーを受け取りました:
エラー:ECONNREFUSED :: 1:8080を接続します
これが失敗する一般的な状況:-インターネットにアクセスできない-Webサーバーを実行または起動するのを忘れた-Webサーバーにアクセスできない-コンピューターに奇妙なネットワーク構成設定がある
このエラーのスタックトレースは次のとおりです。
エラー:ECONNREFUSED :: 1:8080をTCPConnectWrap.afterConnectに接続します[oncompleteとして](net.js:1056:14)
http://localhost:8080
使わなくても正常に機能cy.request
します
.its('body').then((body)
、it('works', () => {
、とVueのアプリはmounted()
、彼らがすべて正しい値とログを持って正しい順序(POSTとtypicodeを打つ)で発生します。私が提案できる唯一のことはbody
、POST後にログを記録し、正しい形式であるかどうかを確認することです。それ以外の場合、Vueアプリはどのようにトークンを使用しますか?
baseUrl
cypress.jsonに正しい値を設定しましたか?