所以我尝试在 cypress (commands.js 文件)中添加自定义命令,如下所示:
\n Cypress.Commands.add("login", (email, password) => {\n cy.intercept(\'POST\', \'**/auth\').as(\'login\');\n cy.visit(\'/auth\');\n cy.get(\'[formcontrolname="email"]\').type(email);\n cy.get(\'[formcontrolname="password"]\').type(password);\n cy.get(\'form\').submit();\n cy.wait(\'@login\').then(xhr => {\n expect(xhr.request.body.email).to.equal(email);\n expect(xhr.request.body.password).to.equal(password);\n });\n });\nRun Code Online (Sandbox Code Playgroud)\n但我收到此错误:
\n\'参数类型字符串不可分配给参数类型 keyof Chainable ... \xc2\xa0\xc2\xa0Type 字符串不可分配给类型“and” | “作为”| “选择文件” | “模糊”| “检查”| “孩子们”| “清晰”| “清除Cookie”| “清除Cookies” | “清除本地存储”| “点击”| ... \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Type 字符串不可分配给类型“intercept”\'
\n我发现这个问题Argument type string is not assignable to parameter type keyof Chainable... in Cypress,但这里的答案仅适用于 index.d.ts 文件,但是我有一个 index.js 文件(cypress版本 10.3.0 这对我不起作用。有人能帮我解决这个问题吗?
\n所以我一直在本地主机上设置我的测试,但现在我想将它们设置为在几个不同的环境上运行,但在所有这些环境上我都有一个单独的baseUrl和apiUrl。dev 有:http://base.url.com和 api:http://base.url.com/api
prod 有:https://prod.url.com和 api:https://prod-api.url.com/v1
我已经阅读了这里的文档和一些帖子(尽管其中很多来自 cypress v10 之前),但我无法决定什么是最好的方法。我倾向于创建不同的配置文件(cypress-dev.config.ts、cypress-prod.config.ts 等),每个文件针对不同的环境,如下所示:
e2e: {
baseUrl: 'http://base.url.com',
env: {
apiURl: '..'
}}
Run Code Online (Sandbox Code Playgroud)
创建新的 npm 脚本,我将 cypress 设置为在特定环境中运行时使用正确的配置文件。
我考虑过使用一个配置文件,但我无法弄清楚到底如何做。
e2e: { env: {
development: {
baseUrl:'baseURlDev',
apiURl: 'apiUrlDev'
},
production: {
baseUrl:'baseURlProd',
apiURl: 'apiUrlProd'
},
staging: {
baseUrl:'baseURlStag'
apiURl: 'apiUrlStag' }
}}
Run Code Online (Sandbox Code Playgroud)
如何使用它是我的赛普拉斯代码。Cypress.env('环境类型.baseUrl')?? 我对此不太清楚。
或者也许还有我还没有考虑过的第三种巧妙的方法?