Tôi đang cố gắng đăng nhập theo chương trình với Cypress trước mỗi bài kiểm tra. Mã thông báo của tôi vẫn tồn tại trong localStorage. Nếu tôi thay đổi nó một cách đồng bộ, tức là làm simpy localStorage.setItem
mà không liên quan đến cy.request
nó hoạt động tốt. Tuy nhiên, tôi muốn sử dụng máy chủ xác thực của mình ( http://localhost:3004/login
bên dưới) để tạo mã thông báo.
Mã thông báo được tìm nạp chính xác từ máy chủ, nhưng ngay sau khi tôi sử dụng lệnh bên dưới cùng với cy.visit('/')
tôi nhận được "Không thể truy cập localhost: 8080 - Chúng tôi đã cố gắng thực hiện một yêu cầu http đến URL này nhưng yêu cầu không thành công mà không có phản hồi" (xem nhật ký đầy đủ bên dưới).
Theo như tôi có thể nói, đây là cách tiếp cận chính xác khi sử dụng máy chủ xác thực để xác thực không đầu. Tôi đã bỏ lở những gì?
Command.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 () không tải được:
Chúng tôi đã cố gắng thực hiện một yêu cầu http đến URL này nhưng yêu cầu không thành công mà không có phản hồi.
Chúng tôi đã nhận được lỗi này ở cấp độ mạng:
Lỗi: kết nối ECONNREFUSED :: 1: 8080
Các tình huống phổ biến tại sao điều này sẽ thất bại: - bạn không có quyền truy cập internet - bạn quên chạy / khởi động máy chủ web của mình - máy chủ web của bạn không thể truy cập - bạn có các cài đặt cấu hình mạng kỳ lạ trên máy tính của mình
Theo dõi ngăn xếp cho lỗi này là:
Lỗi: kết nối ECONNREFUSED :: 1: 8080 tại TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1056: 14)
http://localhost:8080
nó hoạt động tốt mà không cần cy.request
lệnh đăng nhập
.its('body').then((body)
, it('works', () => {
và các ứng dụng Vue mounted()
họ đều có giá trị chính xác và bản ghi xảy ra theo đúng thứ tự (đánh typicode với POST). Điều duy nhất tôi có thể đề nghị là đăng nhập body
sau POST và xem nó có đúng mẫu không. Mặt khác, ứng dụng Vue sử dụng mã thông báo như thế nào?
baseUrl
trong cypress.json chưa?