在量角器测试用例中从电子邮件中获取值 [英] Fetching values from email in protractor test case
问题描述
我需要测试一个量角器测试用例,其中用户注册、接收电子邮件、转到电子邮件中提供的链接并在激活注册表单中填写他/她的详细信息.
问题是如何从电子邮件中获取兑换令牌.我的电子邮件有一个链接到激活页面,其中包含如下所示的身份验证令牌:
<预> <代码> http://127.0.0.1:3000/#/signup/redeem/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJlOTRhYzY3MC1kYTNlLTQyYTUtODVkZS02NDU4ZjVmZGMwYjAiLCJzdWIiOiJ0ZXN0QGNvZWYuY28iLCJpYXQiOjE0Mjc0OTM5MDMsImV4cCI6MTQyODA5ODcwM30.但是我如何获取该令牌以便我可以构建 url 或者我如何在我的电子邮件中单击该按钮以便我可以完成流程?我正在使用 mailcatcher 来模拟电子邮件.
这是我最近解决的问题.希望该解决方案也适用于您的用例.
先决条件:
mail-listener2
包- 理解
promises
的概念
分步说明:
安装
mail-listener2
:npm install mail-listener2 --save-dev
在您的量角器配置中初始化邮件监听器并使其全局可用:
onPrepare: function () {var MailListener = require("mail-listener2");//这里是你的电子邮件连接配置var mailListener = new MailListener({用户名:imap-用户名",密码:imap-密码",主持人:imap-host",端口: 993,//imap 端口tls:是的,tlsOptions: { rejectUnauthorized: false },邮箱:收件箱",//要监控的邮箱searchFilter: ["UNSEEN", "FLAGGED"],//检索到 IDLE 通知后使用的搜索过滤器markSeen: true,//所有获取到的邮件都会被标记为已看到,下次不再获取fetchUnreadOnStart: true,//仅当您想在 lib 启动时获取所有未读电子邮件时才使用它.默认为`false`,mailParserOptions: {streamAttachments: true},//传递给 mailParser lib 的选项.attachments: true,//将遇到的附件下载到项目目录中attachmentOptions: { directory: "attachments/" }//指定附件下载目录});mailListener.start();mailListener.on(服务器:已连接",函数(){console.log("邮件监听器初始化");});global.mailListener = mailListener;}),onCleanUp: 函数 () {mailListener.stop();},
创建一个助手
getLastEmail()
函数,它会等待一个email
被检索:function getLastEmail() {var deferred = protractor.promise.defer();console.log("正在等待邮件...");mailListener.on(邮件",函数(邮件){deferred.fulfill(mail);});返回 deferred.promise;};
示例测试用例:
describe("示例测试用例", function () {beforeEach(函数(){browser.get("/#login");browser.waitForAngular();});它(应该使用发送到电子邮件的注册码登录",函数(){element(by.id("username")).sendKeys("MyUserName");element(by.id("password")).sendKeys("MyPassword");element(by.id("loginButton")).click();browser.controlFlow().await(getLastEmail()).then(function (email) {expect(email.subject).toEqual("新注册码");期望(email.headers.to).toEqual("myemail@email.com");//从电子邮件中提取注册码var pattern =/注册码为:(w+)/g;var regCode = pattern.exec(email.text)[1];控制台日志(regCode);});});});
I need to test a protractor test case in which a user signs up, receives an email, goes to the link provided in the email and fills up his/her details in activation signup form.
The problem is how can I get the redeem token from the email. My email has a link to the activation page which has the auth token like following:
http://127.0.0.1:3000/#/signup/redeem/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJlOTRhYzY3MC1kYTNlLTQyYTUtODVkZS02NDU4ZjVmZGMwYjAiLCJzdWIiOiJ0ZXN0QGNvZWYuY28iLCJpYXQiOjE0Mjc0OTM5MDMsImV4cCI6MTQyODA5ODcwM30.
But how do I fetch that token so that I can build the url or how can I click that button in my email so that I can complete the flow ? I am using mailcatcher to simulate email.
This is something I've solved recently. Hope the solution would also apply for your use-case.
Prerequisites:
mail-listener2
package- understanding of the concept of
promises
Step by step instructions:
Install
mail-listener2
:npm install mail-listener2 --save-dev
In your protractor config initialize Mail Listener and make it available globally:
onPrepare: function () { var MailListener = require("mail-listener2"); // here goes your email connection configuration var mailListener = new MailListener({ username: "imap-username", password: "imap-password", host: "imap-host", port: 993, // imap port tls: true, tlsOptions: { rejectUnauthorized: false }, mailbox: "INBOX", // mailbox to monitor searchFilter: ["UNSEEN", "FLAGGED"], // the search filter being used after an IDLE notification has been retrieved markSeen: true, // all fetched email willbe marked as seen and not fetched next time fetchUnreadOnStart: true, // use it only if you want to get all unread email on lib start. Default is `false`, mailParserOptions: {streamAttachments: true}, // options to be passed to mailParser lib. attachments: true, // download attachments as they are encountered to the project directory attachmentOptions: { directory: "attachments/" } // specify a download directory for attachments }); mailListener.start(); mailListener.on("server:connected", function(){ console.log("Mail listener initialized"); }); global.mailListener = mailListener; }), onCleanUp: function () { mailListener.stop(); },
Create a helper
getLastEmail()
function which would wait for anemail
to be retrieved:function getLastEmail() { var deferred = protractor.promise.defer(); console.log("Waiting for an email..."); mailListener.on("mail", function(mail){ deferred.fulfill(mail); }); return deferred.promise; };
Example test case:
describe("Sample test case", function () { beforeEach(function () { browser.get("/#login"); browser.waitForAngular(); }); it("should login with a registration code sent to an email", function () { element(by.id("username")).sendKeys("MyUserName"); element(by.id("password")).sendKeys("MyPassword"); element(by.id("loginButton")).click(); browser.controlFlow().await(getLastEmail()).then(function (email) { expect(email.subject).toEqual("New Registration Code"); expect(email.headers.to).toEqual("myemail@email.com"); // extract registration code from the email message var pattern = /Registration code is: (w+)/g; var regCode = pattern.exec(email.text)[1]; console.log(regCode); }); }); });
这篇关于在量角器测试用例中从电子邮件中获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!