【问题标题】:Different Cypress baseUrl for cy.visit() and cy.request()cy.visit() 和 cy.request() 的不同 Cypress baseUrl
【发布时间】:2019-09-20 18:17:52
【问题描述】:

我们在本地测试的应用程序有一个前端和后端,分别在 localhost:4200127.0.0.1:8000 上运行。

当调用cy.visit('/somepage') 时,我们希望baseUrlcy.request('/someapi') 不同,因为cy.visit() 将访问托管在前端的页面,而cy.request() 将向API 端点发出请求后端。

我们可以将cypress.json 中的默认baseUrl 配置用于cy.visit(),但有没有办法让cy.request() 默认设置为与默认baseUrl 不同的配置设置?尽量避免像cy.request(<fully qualified domain name> + '/someapi') 这样到处指定这个。谢谢!

【问题讨论】:

    标签: cypress


    【解决方案1】:

    我认为您可以使用配置文件 cypress.env.json 来存储您的 API url 并从每个测试用例中获取它。

    在你的 cypress.env.json 中

    "apiUrl": "http://api"
    

    在你的测试用例中

    describe('get the api variable from config file', () => {
        //set up the variables
        const apiUrl = Cypress.env('apiUrl');
        cy.request(apiUrl + '/someapi');
    

    【讨论】:

    • cypress 应该让我们摆脱这样的样板
    • @Stuck 我猜 80/20 规则适用...如果你需要它,cypress 让 you 添加自定义命令:只需 Cypress.Commands.add("api", (urlPath)=> cy.request(Cypress.env('apiUrl') + urlPath) 然后你可以 @ 987654324@随心所欲:)
    • @conny 你的意思是我在 2 个月前的回答中写的? ;)
    【解决方案2】:

    我不知道 cypress 中允许为 baseUrl 分别配置不同的 baseUrls 的功能。 request.

    由于您想摆脱为每个测试设置正确 API uri 的样板,您还可以在 cy.request 周围编写自定义命令:

    cypress/support/commands.js

    import { API_URI } from '../constants';
    // you may want to add a more suitable wrapper depending on the params/options you need to support.
    Cypress.Commands.add('api', uri => cy.request(API_URI + uri));
    

    your_spec.js

    describe('Foor', () => {
      it('Baar', () => {
        cy.api('/someapi')...
      });
    });
    

    奖励提示:请注意,如果没有为 cy.request() 提供完全限定域名 (FQDN),则它的行为 stateful 通过使用最后一次 cy.visit 调用的 uri 或作为赛普拉斯配置的后备baseUrl。这个答案的方法不受它的影响,因为它总是设置 FQDN。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2022-12-02
      • 1970-01-01
      • 2023-01-11
      • 2019-03-29
      • 2020-05-04
      • 2019-11-25
      相关资源
      最近更新 更多