嘿,我正在用 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) 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' 断言抛出的错误?
我是赛普拉斯的新手。我想知道是否有任何方法可以通过用 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) 我尝试了很多方法,但并不总是有效。我的意思是..它确实找到了该元素并单击它...但并不总是为下拉输入字段添加值。我无法继续测试,因为下拉列表是我需要的必填字段。 下拉输入字段不能为空。
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) 与我见过的所有“util.promisify 不是函数”线程不同,我没有明确尝试使用“util.promisify”函数。
我想做的是在赛普拉斯测试期间运行数据库查询。
以下方法在服务器端工作,但在赛普拉斯测试期间抛出合适的客户端(浏览器)端:
数据库文件:
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) 我正在尝试使用 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)
我缺少什么?
我想在第一次测试之前执行一个设置夹具的命令。但它不应该在每次测试之前运行 - 就在第一个测试之前运行。
我正在尝试获取已部署应用程序的功能标志,我正在对其进行测试(本地、暂存或生产)。在应用程序中,功能标志存储在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.jsontest-header.cy.ts测试如果我有三个测试:test-x.cy.ts、test-y.cy.ts和test-z.cy.ts,那么我希望它这样做:
fixtures/feature-flags.jsontest-x.cy.ts测试test-y.cy.ts测试test-z.cy.ts测试我该怎么做呢?
我试过了:
将一部分添加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)如果您尝试使用 cy.visit('/') 和https://www.tutorialspoint.com/html/index.htm的基本 URL, 您会发现视口根本不像网站:注意:看起来像使用 baseURL 和 cy.visit() 中的完整 URL 之间是有区别的。无论哪种情况 cy.visit 最终都会失败:
您的页面未
load在以下时间内触发其事件60000ms
我似乎无法过去访问该网站。这意味着,我无法在其中执行任何验证。Cy.visit(或我厌倦的任何其他导航黑客和自定义命令)最终以不同的方式失败。
也许网站正在等待一些永远不会加载的资源,我可以停止网站进一步加载吗?
cypress ×8
javascript ×2
database ×1
dropdown ×1
json ×1
json-server ×1
material-ui ×1
node.js ×1
promise ×1
reactjs ×1
request ×1
sql ×1
testing ×1
typescript ×1