我已经开始测试一个反应webapp但我没有走远,因为我遇到了登录问题.我正在使用cypress e2e测试工具.
将显示一个欢迎页面,其中包含一个要登录的按钮,该按钮将重定向到您的auth0服务.用户使用电子邮件和密码登录,然后使用令牌重定向回webapp.
我尝试了许多不同的方法,导致了不同的问题.
注意:我不想测试Auth0,我只想输入我的webapp.
尝试1.单击登录按钮
尝试:赛普拉斯应该像用户一样做,因此测试将点击登录按钮并转到Auth0并填写凭据.问题:赛普拉斯不允许您在测试期间导航到其他域.
由于赛普拉斯更改了自己的主机URL以匹配您的应用程序的URL,因此它要求您的应用程序保留在同一个超级域中以进行单个测试.
您应该能够禁用该设置"chromeWebSecurity": false,cypress.json但它无法使用,因为您只能访问单个域cy.visit()
尝试2.从测试中以编程方式登录
尝试:使用auth0-js库登录cypress测试,因此不需要单击登录按钮,因此不会发生域更改.
describe('Waiting to fetch', () => {
beforeEach(() => {
this.fetchAuthDeferred = getDeferred()
cy.visit('http://localhost:3000', {
onBeforeLoad(win) {
cy.stub(win, 'fetch')
.withArgs($url)
.as('fetchAuth')
.returns(this.fetchAuthDeferred.promise)
}
})
})
it('login', () => {
cy.visit('http://localhost:3000')
const auth = new auth0.WebAuth(authOptions)
auth.login(loginOptions)
cy.get('@fetchAuth', { timeout: 10000 }).should('haveOwnProperty', 'token')
cy.visit('http://localhost:3000')
cy.get('[class*="hamburger"]').click()
})
})
Run Code Online (Sandbox Code Playgroud)
问题:cy.route() 不等待获取请求,解决方法是使用cy.stub(win, 'fetch').它不会等待:
尝试3.从webapp以编程方式登录
尝试:我开始认为柏树只是从应用程序发出的间谍请求,而不是来自测试本身(正如我在上面的观点中所尝试的那样).
我在欢迎页面中添加了一个假登录按钮,该按钮将 …