使用配置文件进行 Cypress-tests,因此可以在每个测试中覆盖 baseUrl 的端口(可能作为环境变量)

Zet*_*eth 0 cypress cypress-configuration

我有一个cypress.config.ts类似这样的文件:

import {defineConfig} from "cypress";

export default defineConfig(
    {
        e2e: {
            baseUrl: 'http://localhost:3000',
        }
    }
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

问题 1:我正在构建的应用程序必须使用不同的端口来实现不同的功能。例子:

问题 2: Cypress 自动将尾部斜杠添加到baseUrl,因此我以后无法自己添加端口(在单独的测试中),而不需要进行一些字符串操作体操。

那么我该如何设置,以便在测试开始时可以定义应使用哪个端口?比如这样:

// This doesn't work: 

it('Test feature 1', () => {
    Cypress.env('PORT', 3000);
    cy.request('GET', 'feature-1').as('featureOne')
    ...
    ...
});

it('Test feature 2', () => {
    Cypress.env('PORT', 3002);
    cy.request('GET', 'feature-2').as('featureTwo')
    ...
    ...
});
Run Code Online (Sandbox Code Playgroud)

解决方案尝试 1:保留baseUrl为空字符串

如果让我cypress.config.ts这样:

import {defineConfig} from "cypress";

export default defineConfig(
    {
        e2e: {
            baseUrl: '',
        }
    }
    ...
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样完整地引用 URL:

it('Test feature 1', () => {
    Cypress.env('PORT', 3000);
    cy.request('GET', 'http://localhost:3000/feature-1').as('featureOne')
    ...
    ...
});

it('Test feature 2', () => {
    Cypress.env('PORT', 3002);
    cy.request('GET', 'http://localhost:3002/feature-2').as('featureTwo')
    ...
    ...
});
Run Code Online (Sandbox Code Playgroud)

有用。但这似乎很愚蠢。


解决方案尝试2:摆弄cypress.config.ts

我想象能够做这样的事情:

const PORT = process.env.PORT || 3000

export default defineConfig(
    {
        e2e: {
            baseUrl: 'http://localhost' + PORT, 
        }
    }
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

这可行,但我无法覆盖测试中的 PORT ( Cypress.env('PORT', 3002);)。不知道是不是因为太晚了。

所以总的来说,这是行不通的。但如果这样做的话那就很聪明了。:-)

小智 5

您可以将 更改baseUrl为您想要的任何内容Cypress.config('baseUrl', something)

// cypress.config.js
const { defineConfig } = require("cypress");
module.exports = defineConfig({
  e2e: {
    baseUrl: 'http://localhost:3000',
  },
})
Run Code Online (Sandbox Code Playgroud)
it('changes the baseUrl', () => {
  Cypress.config('baseUrl', 'http://localhost:3002')
  cy.visit('/');
  cy.url().should('eq', 'http://localhost:3002/')        // passes
})
Run Code Online (Sandbox Code Playgroud)

或者

it('changes the baseUrl', () => {
  Cypress.config('baseUrl', 'http://example.com')
  cy.visit('/');
  cy.url().should('eq', 'http://example.com/')         // passes
})
Run Code Online (Sandbox Code Playgroud)