【发布时间】:2020-03-02 19:36:55
【问题描述】:
事情是这样的,因为 cypress 集成测试在浏览器内部运行,节点环境在其中不可用,因此我不能在测试中的任何地方使用 Pact 对象。
通过 Cypress 任务
尽管如此,我可以实现 cypress task,并将所有与 cypress 相关的代码移至此任务,并通过其他任务进行所有通信。这种方式流程变得过于复杂,需要在任务中支持 Pact 对象的生命周期,并复制所有消息。像这样:
cypress/plugins/index.js:
const {Pact} = require("@pact-foundation/pact")
module.exports = (on) => {
on("task", {
createPactServer() {
return new Pact({
consumer: "TodoApp",
provider: "TodoService",
port: 8501,
// log: path.resolve(process.cwd(), "logs", "pact.log"),
// dir: path.resolve(process.cwd(), "pacts"),
logLevel: "info",
})
}
})
}
cypress/integration/test.js:
describe("Login page", (): void => {
it("should log in", (): void => {
let a = cy.task('createPactServer', );
// do rest
// manage verify
// handle errors from verify
// shutdown pact server
// handle all other lifecycle events.
});
});
我想避免那种方式!
通过柏树路线
cypress 还带有route,它允许模拟网络并存根响应。我想知道是否有任何方法可以混合这些,所以我什至根本不会用 Pact 服务器监听端口。我没有找到任何方法认为我没有调查太久。还有 pact-web 在我看来只是没有 http 服务器的模拟部分,但没有关于将它与 API 集成的文档。我还发现 pact 使用 ruby 文件,这可能导致无法在非节点环境中使用 w/o http 服务器。
我想知道是否无论如何尝试将它们结合在一起,以及首选的方式是什么。
【问题讨论】:
-
这真是太及时了——我们一直在讨论如何才能使所有这些工作一起工作,但没有一个核心维护者对 Cypress 有很好的掌握。您愿意加入我们的 slack 频道以便我们在那里讨论吗?我不确定我们是否可以通过 SO 完全解决这个问题。 slack.pact.io - 你可以私信我,我们可以从那里开始。
-
我还想了解一下我们希望我们的集成、合同和 e2e 测试一起进行的更新(哎呀,甚至使用 cypress 的 jest 插件进行单元测试)。