我是赛普拉斯的新手,我想知道如何进行以下检查: 我有情况: 我在数据库中有一个产品,其状态可以为:InStock和OutOfStock以及已停产。如果产品处于“ InStock”状态,则应该可以将其发送给客户,如果产品处于“ OutOfStock” /“已停产”状态,则不能将其发送给客户。 通过api调用,我可以将产品分发给客户。如果产品处于“ InStock”状态,则api响应为200,否则返回状态码为400。 所以我的问题是:如何为每个测试更改数据库中产品的状态,以便可以检查3种状态中的每一种(如果api返回正确的响应)?我知道如何检查api响应本身,但是我不清楚如何在每次测试之前更改db中产品的状态。
答案 0 :(得分:0)
您想模拟您的api调用,以便它响应您想要的内容。赛普拉斯称其为存根。这将使您能够截获Rest呼叫并将其替换为所需的呼叫。您也可以调用API来重置数据库,但是我不建议这样做。
https://docs.cypress.io/guides/guides/network-requests.html#Requests
import scala.concurrent.ExecutionContext
def withBag(body: Bag => Result)(implicit ec: ExecutionContext): Future[Result] =
withBagAsync(bag => Future(body(bag)))
答案 1 :(得分:-1)
与@Maccurt不同,我将实际上按照您提出的方式(更改数据库)进行操作,以便您可以正确地测试e2e流程。
您可以使用cy.task
与可以直接写入DB的Cypress Runner的节点进程进行通信,而不必设置将写入DB的测试路由。看起来像这样:
在此示例中,使用postgres(node-postgres)。
your-test.spec.js
describe("test", () => {
it("test", () => {
cy.task("query", {
sql: `
UPDATE product
SET status = $1
WHERE id = $2
`,
values: [ "InStock", 40 ]
});
// your cy assertions here
});
});
cypress/plugins/index.js
const pg = require("pg");
const pool = /* initialize your database connection */;
module.exports = ( on ) => {
on( "task", {
query ({ sql, values }) {
return pool.query( sql, values );
}
});
});