0

我试图让 Mailcatcher 在赛普拉斯测试中捕获电子邮件。Mailcatcher 运行在localhost:1080,我的应用程序在端口 3000 上运行。

到目前为止,我不能简单地使用cy.visit('localhost:1080),因为我已经通过cy.visit()(第二个唯一域)访问了我的应用程序。所以我尝试了这个:

cy
.request('http://localhost:1080/')
.its('body') //this gives me only a list of headers

电子邮件存储在里面<tbody></tbody>,但上面的请求让我觉得这个<tbody>元素是空的

我期待得到tr电子邮件的存储位置。任何建议如何做到这一点?

4

2 回答 2

1

我遇到了这个确切的场景(使用 Cypress 进行测试以确保通过 Mailcatcher 成功发送电子邮件)并采用建议的代理请求方法。

我注意到 Mailcatcher 包含一个非常基本的 API,它允许我通过以下 URL 获取已发送电子邮件的列表:

http://localhost:1080/messages

然后,我可以通过以下请求获取每封电子邮件的详细信息(替换1为 Mailcatcher 电子邮件的 ID):

  • http://localhost:1080/messages/1.json
  • http://localhost:1080/messages/1.plain
  • http://localhost:1080/messages/1.html

多亏了这个界面,代理非常简单。在我的场景中,我使用 PHP 作为代理,我的设置如下所示:

  1. 在 http://localhost/mailcatcher_proxy.php 添加一个新页面
  2. 添加代码mailcatcher_proxy.php以从请求中获取参数并使用 cURL 将请求返回到 localhost:1080/messages/
  3. 格式化结果并将其打印在 mailcatcher_proxy.php 中,以便通过 Cypress 轻松测试

像魅力一样工作!

于 2020-08-31T17:06:34.257 回答
0

不是我的解决方案,只是从谷歌和赛普拉斯的 github 借来的(https://github.com/cypress-io/cypress/issues/418):

电子邮件似乎确实是需要额外域的常见场景。我们采用的解决方案是使用 https://mailcatcher.me/使电子邮件在浏览器中可用,然后向 webpack-dev-server 添加代理,以便可以在与 webapp 相同的主机上访问它。这样您就可以将电子邮件视为另一个页面,访问它并单击链接。如果您需要访问您的后端服务器,您可以添加一个额外的代理以使其在 webapp 域上可用。

于 2019-04-25T12:00:01.737 回答