标签: cypress

测试后反应cypress json-server恢复到原始数据库

嘿,我正在用 cypress 测试 React 应用程序,并使用 json-server 来测试一个假 api。

当我运行一些测试时,它将更改我的 db.json 文件的数据库。

因此计划是在每次测试后将数据库恢复到原始状态。

这是我的代码:

describe('Testing fake db to be restored to original database after 
updating it in other test', () => {

 let originalDb: any = null

    it('Fetch the db.json file and then updating it to the original copy', 
       () => {

      // Save a copy of the original database
      cy.request('GET', 'localhost:8000/db').then(response => {
         originalDb = response;
         console.log(originalDb);
       })

    // Restore the original database
    cy.wrap(originalDb).then(db => {
      cy.request({
        method: 'PUT',
        url: …
Run Code Online (Sandbox Code Playgroud)

testing request reactjs json-server cypress

-2
推荐指数
1
解决办法
184
查看次数

Cypress:当“应该”断言失败时如何捕获错误

should当断言失败时我需要捕获错误。想象一下 .should('not.exist') 的第一个断言失败了(元素仍然可见)

我需要的示例(但这不适用于 Cypress 和 JS):

   this.containsInIframe('tr', assetName)
  .find('div.loader', { timeout: 100000 })
  .should('not.exist')
  .catch((error) => {
    this.reloadPage();
    this.containsInIframe('tr', assetName)
      .find('div.loader', { timeout: 100000 })
      .should('not.exist');
  });
Run Code Online (Sandbox Code Playgroud)

使用Cypress和JS如何处理这种情况?谁能提出解决这个问题的方法?

如何捕获 cypress 'should' 断言抛出的错误?

javascript cypress

-2
推荐指数
1
解决办法
158
查看次数

Cypress:有什么方法可以用测试用例中生成的数据替换固定字段以生成动态有效负载(尝试了现有的 sol)

我是赛普拉斯的新手。我想知道是否有任何方法可以通过用 cypress 测试中以编程方式生成的值替换 JSON 文件的值来生成动态有效负载。我们在放心中所做的事情是替换 JSON 文件的 %s。我在网上搜索了很多但没有找到。类似的一些问题是这对我不起作用 我想将动态 json 正文传递给 cypress request() 函数并定义有效负载值

我有以下 json 文件

{
    "name": "Ganesh vishal kumar",
    "gender": "Male",
    "email": "ganesh.kumar234@test.org",
    "status": "active"
}
Run Code Online (Sandbox Code Playgroud)

我想要一个动态 JSON 文件装置。在下面的测试中,我以编程方式生成电子邮件 ID 并直接在 JSON 正文中使用它。这里我想使用JSON文件fixture

it('first post test', () => {
        var pattern = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        var emailId = "";

        for (var x = 0; x < 10; x++) {
            emailId = emailId + pattern.charAt(Math.floor(Math.random() * pattern.length));
        }
        emailId = emailId + '@test.org'
        cy.request({
            method: 'POST',
            url: 'https://gorest.co.in/public/v2/users',
            body: { …
Run Code Online (Sandbox Code Playgroud)

json typescript web-api-testing cypress

-2
推荐指数
1
解决办法
347
查看次数

使用 cypress 的 Material UI 下拉列表并不总是有效

我尝试了很多方法,但并不总是有效。我的意思是..它确实找到了该元素并单击它...但并不总是为下拉输入字段添加值。我无法继续测试,因为下拉列表是我需要的必填字段。 下拉输入字段不能为空。

Cypress.Commands.add("selectTooltipDropdownOption", (optionText, inputSelector) => {
    cy.getCyInput(inputSelector,{timeout:10000}).click();

    cy.getCyRole("menu").children('li').contains(optionText).trigger("click", { timeout: 10000 });
  
    cy.getCyInput(inputSelector)
      .invoke("prop", "defaultValue")
      .should("contain", optionText);
  });
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能使遗嘱cy.getCyInput("dropdowninputField")始终具有价值而不是空的?

赛普拉斯跑

下拉菜单似乎不是选择类型;它是一个经典的选择组件,具有来自 Material UI 的附加样式。这是它在 HTML 中的样子。我将尺寸做得更小,以便更容易查看,并且位置是根据元素或组件的 ID 动态变化的。

Cypress.Commands.add("selectTooltipDropdownOption", (optionText, inputSelector) => {
    cy.getCyInput(inputSelector,{timeout:10000}).click();

    cy.getCyRole("menu").children('li').contains(optionText).trigger("click", { timeout: 10000 });
  
    cy.getCyInput(inputSelector)
      .invoke("prop", "defaultValue")
      .should("contain", optionText);
  });
Run Code Online (Sandbox Code Playgroud)

material-ui dropdown cypress

-2
推荐指数
1
解决办法
136
查看次数

尝试运行数据库查询时,Cypress 测试期间出现“util.promisify 不是函数”错误

与我见过的所有“util.promisify 不是函数”线程不同,我没有明确尝试使用“util.promisify”函数。

我想做的是在赛普拉斯测试期间运行数据库查询。

  • 节点16.15.1
  • 赛普拉斯 13.5.1
  • 打字稿 5.0.2
  • ts-节点 10.9.1
  • 微软SQL 9.1.1

以下方法在服务器端工作,但在赛普拉斯测试期间抛出合适的客户端(浏览器)端:

数据库文件:

import sql from 'mssql';

export default class Database {
    private _databaseConnectionString;

    constructor() {
        this._databaseConnectionString = 'censored but valid connection string';
    };

    async query(query: string) {
        try {
           await sql.connect(this._databaseConnectionString);
           const result = await sql.query(query);
           return result;
        } catch (errorMessage) {
            throw new Error(`Error querying database.\n${errorMessage}`);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

测试文件:

import Database from "../../support/test_data/utilities/database";
const database = new Database();

describe('testing', () => {
    it('test', () …
Run Code Online (Sandbox Code Playgroud)

sql database node.js promise cypress

-2
推荐指数
1
解决办法
177
查看次数

无法验证赛普拉斯响应中的值

我正在尝试使用 Cypress 验证端点响应中的密钥值,我想验证它responseCode应该等于 400,但它返回了我的undefined值。

我正在使用以下逻辑:

describe("Veriy Login", () => {
  context("Verify Login", () => {
    it("Verify User Login", () => {
      cy.request({
        method: "POST",
        url: "https://automationexercise.com/api/verifyLogin?email=login_user_123@test.com&password=Test@12345",
      }).should((response) => {
        expect(response.status).to.eq(200);
        expect(response
            .body.responseCode)
        .to.eq(400);
      });
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

当我在 Cypress runner 上运行此命令时,我收到了响应,可以在屏幕截图中查看:

在此输入图像描述

以下是回应:

{
    "responseCode": 400,
    "message": "Bad request, email or password parameter is missing in POST request."
}
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

javascript cypress

-2
推荐指数
1
解决办法
59
查看次数

如何在使用 Cypress 运行第一次测试之前运行命令

我想在第一次测试之前执行一个设置夹具的命令。但它不应该在每次测试之前运行 - 就在第一个测试之前运行。

我正在尝试获取已部署应用程序的功能标志,我正在对其进行测试(本地、暂存或生产)。在应用程序中,功能标志存储在window对象上:window.featureFlags。我的setupFixtures函数应该将这些功能标志保存到我的fixtures/feature-flags.json. 这样,我将能够根据部署的代码查看是否启用了某个功能。

然后我可以将其添加到我的所有测试中:

beforeEach( function(){
  if( !isFeatureEnabled( 'FEATURENAME' ) ){
    this.skip();
  }
});
Run Code Online (Sandbox Code Playgroud)

这意味着它将从给定的部署代码中获取 featureName。如果未启用 featureName,则会自动跳过该测试。

  • 如果我运行一个名为 的测试test-header.cy.ts,那么我希望我的测试能够执行以下操作:

    • 获取功能标志并将其保存到fixtures/feature-flags.json
    • 运行test-header.cy.ts测试
  • 如果我有三个测试:test-x.cy.tstest-y.cy.tstest-z.cy.ts,那么我希望它这样做:

    • 获取功能标志并将其保存到fixtures/feature-flags.json
    • 运行test-x.cy.ts测试
    • 运行test-y.cy.ts测试
    • 运行test-z.cy.ts测试

我该怎么做呢?

我试过了:

  1. 将一部分添加before到我的e2e.ts文件中:

    这需要定义一些辅助函数和任务,但如果我这样做:

    // Add isFeaturedEnabled globally (so we don't need to import it every time)
    function isFeatureEnabled(featureName) { …
    Run Code Online (Sandbox Code Playgroud)

cypress

-2
推荐指数
1
解决办法
39
查看次数

使用 cypress 访问教程点一直等待页面加载

如果您尝试使用 cy.visit('/') 和https://www.tutorialspoint.com/html/index.htm的基本 URL, 您会发现视口根本不像网站:注意:看起来像使用 baseURL 和 cy.visit() 中的完整 URL 之间是有区别的。无论哪种情况 cy.visit 最终都会失败:

您的页面未load在以下时间内触发其事件60000ms

使用 baseURL 进行访问

我似乎无法过去访问该网站。这意味着,我无法在其中执行任何验证。Cy.visit(或我厌倦的任何其他导航黑客和自定义命令)最终以不同的方式失败。

也许网站正在等待一些永远不会加载的资源,我可以停止网站进一步加载吗?

cypress pageloadtimeout

-3
推荐指数
2
解决办法
203
查看次数