我刚刚进入了使用 puppeteer 和 jest 进行测试的世界,我想知道在文件夹架构和逻辑方面的最佳实践是什么。
我以前从未做过测试,我想我对不同的原则和概念以及它们如何组合在一起有点迷失了。
我学会了基于页面对象模型进行测试,所以我的每个页面都有类,而且我的每个模块(或组件)也有类。例如,在我的应用程序中,标题或登录模式是组件。
然后我每页或每个组件都有一个测试文件。(例如landingPage.tests.js
文件,它使用文件中的 LandingPage 类的模型LandingPage.js
)
这是一个具体的例子:我有不同的登录案例,我想测试它们。例如,我想测试与“普通”用户连接,该过程只是登录然后密码。然后我需要与已激活 2FA 的用户或使用 SSO 的公司的用户一起进行测试。
我首先考虑将我的不同测试放在authentication.tests.js
不同的describe
块中,认为它每次都会打开一个新选项卡,但它不会......我在隐身模式下使用 puppeteer 以确保每个选项卡都是一个独立的会话。
所以我的问题是:
做这些测试套件的最佳地点在哪里?
我是否应该有“描述”页面的测试文件(例如,按钮必须存在,这样的文本必须在此处等)并且还有“场景类型”测试文件(对用户的一组上下文操作,例如对于我不同的登录案例)?
这是authentication.tests.js
,我想在其中测试我所有不同的登录方式:
import HeaderComponent from "../../../pages/components/HeaderComponent";
import AuthenticationComponent from "../../../pages/components/AuthenticationComponent";
import LandingPage from "../../../pages/landing/LandingPage";
import {
JEST_TIMEOUT,
CREDENTIALS
} from "../../../config";
describe('Component:Authentication', () => {
let headerComponent;
let authenticationComponent;
let landingPage;
beforeAll(async () => {
jest.setTimeout(JEST_TIMEOUT);
headerComponent = new HeaderComponent;
authenticationComponent = new AuthenticationComponent;
landingPage = new LandingPage;
});
describe('Normal login ', () => {
it('should click on login and open modal', async () => {
await landingPage.visit();
await headerComponent.isVisible();
await headerComponent.clickOnLogin();
await authenticationComponent.isVisible();
});
it('should type a normal user email adress and validate', async () => {
await authenticationComponent.typeUsername(CREDENTIALS.normal.username);
await authenticationComponent.clickNext();
});
it('should type the correct password and validate', async () => {
await authenticationComponent.typePassword(CREDENTIALS.normal.password);
await authenticationComponent.clickNext();
});
it('should be logged in', async () => {
await waitForText(page, 'body', 'Success !');
});
});
describe('SSO login ', () => {
// todo ...
});
});
谢谢,如果这听起来令人困惑,我很抱歉,就像我说的那样,我正试图弄清楚这一切是如何结合在一起的。