如何使用外部托管登录进行角度组件测试?

时间:2017-12-29 09:35:31

标签: angular unit-testing auth0 e2e-testing

我没有要显示的代码,因为目前我不知道从哪里开始。

任何在角度应用上进行端到端测试的人都应该熟悉ng e2e命令,该命令会旋转浏览器并尝试对组件进行测试。

问题是我正在测试的应用程序要求您通过Auth0托管登录屏幕登录,然后将您重定向到应用程序,然后在本地存储中设置令牌,从那时开始检查每个请求,如果它有效应用程序的路由将您带到主页。

我的问题是运行ng e2e会旋转应用程序,标准功能会运行并重定向到auth0托管登录屏幕,然后量角器会看到它所查看的页面不是一个有角度的应用程序而且测试/浏览器关闭。

是否有人为测试或其他任何方式设置虚假访问令牌?

2 个答案:

答案 0 :(得分:1)

我最终基本上使用裸网络驱动程序执行登录功能,并进行一些策略性的睡眠。睡觉有点笨拙,可以用等待的东西代替,但它现在就完成了工作。

it('should log in with test user, expect h1 Welcome on front page', () => {
    return page.clickLogIn()) // my page has a log in button that is in its own page object
        .then(_ => browser.sleep(3000)) // wait for Auth0 page to load
        // from here you use non protractor syntax and follow webdriverjs
        // using "browser.driver"
        .then(_ => browser.driver.findElement(By.name('email')))
        .then(e => e.sendKeys('someone@mail.com'))
        .then(_ => browser.driver.findElement(By.name('password')))
        .then(e => e.sendKeys('23p98pjasrnvaaa'))
        .then(_ => browser.driver.findElement(By.css('button'))) // can't find it by text for some reason
        .then(e => e.click())
        .then(_ => browser.driver.sleep(6000))
        // here we're back to protractor
        .then(_ => element.all(by.cssContainingText('h1', 'Welcome, someone')))
        .then(l => expect(l.length).toBe(1));
});

稍后我将上述内容抽象为自己的函数,并使用if语句,条件是Auth0页面是否要求我登录,如果我已经登录用户进行后续测试。因此,在每次测试中,该功能都将登录,或者它会点击“@@ someone'”;按钮。

答案 1 :(得分:0)

没有人会看到这个,但如果你看看量角器以及如何从中获取webdriver的实例,这将允许你在外部网站上运行webdriver(即selenium)命令。