- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一种情况,我想在拦截中生成 JWT token 并将其返回到它的主体中。
问题在于,在该 token 的有效载荷中,应该使用另一个拦截的值。
这意味着我只能在拦截期间生成 token 。
const code = '1234567890ABCDEFGH';
let accessTokenSource, idTokenSource, accessToken, idToken;
cy.fixture('access.token.json').then((source) => (accessTokenSource = source));
cy.fixture('id.token.json').then((source) => (idTokenSource = source));
cy.intercept('https://****/authorize', (req) => {
const url = new URL(req.url);
idTokenSource.claims.nonce = url.searchParams.get('nonce');
req.redirect(`${Cypress.config().baseUrl}?code=${code}&state=${url.searchParams.get('state')}`);
});
cy.intercept('https://****/oauth/token', (req) => {
cy.task('generateToken', accessTokenSource).then((token) => (accessToken = token));
cy.task('generateToken', idTokenSource).then((token) => (idToken = token));
console.log('accessToken', accessToken);
console.log('idToken', idToken);
req.reply({
body: {
access_token: accessToken,
expires_in: 86400,
id_token: idToken,
scope: 'openid profile email',
token_type: 'Bearer',
},
headers: {
'content-type': 'application/json',
},
});
});
正如您可能已经想到的那样,
accessToken
和
idToken
是空的。
generateToken
任务完成以在
req.reply
中使用它?
cy.task('generateToken', accessTokenSource).as('generateAccessToken');
cy.task('generateToken', idTokenSource).as('generateIdToken');
cy.wait('@generateAccessToken').then((token) => (accessToken = token));
cy.wait('@generateIdToken').then((token) => (idToken = token));
console.log('accessToken', accessToken);
console.log('idToken', idToken);
附言2。当我将
generateToken
放在测试的
it()
中时,ojit_code 工作得很好。
最佳答案
我已经通过不再使用插件而是直接执行 sign 函数来创建一个解决方法。
在 cypress 测试文件之上:
import jwt from 'jsonwebtoken';
const generateToken = function (privateKey, options) {
return jwt.sign(options.claims, privateKey, { algorithm: 'RS256', expiresIn: options.expires, issuer: options.issuer });
};
测试开始:
let authCode, privateKey, accessTokenSource, idTokenSource, accessToken, idToken;
authCode = Cypress.env('authCode');
cy.readFile(Cypress.env('jwtPrivateKey')).then((key) => (privateKey = key));
cy.fixture('access.token.json').then((source) => (accessTokenSource = source));
cy.fixture('id.token.json').then((source) => (idTokenSource = source));
截距:
cy.intercept('https://***/oauth/token', (req) => {
const params = new URLSearchParams(req.body);
expect(params.get('code')).to.equal(authCode);
accessToken = generateToken(privateKey, accessTokenSource);
idToken = generateToken(privateKey, idTokenSource);
req.reply({
body: {
access_token: accessToken,
expires_in: 86400,
id_token: idToken,
scope: 'openid profile email',
token_type: 'Bearer',
},
headers: {
'content-type': 'application/json',
},
});
});
关于 Cypress :如何在 `cy.task` 中等待 `cy.intercept`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66656659/
我在等待异步功能完成时苦苦挣扎。特别是,我发现这两种方法在测试继续之前等待异步函数完成,但不知道其中的区别(如果有区别的话):。我的目标是在实际测试开始之前等待bepreEach()块中的两个异步函数
我在等待异步功能完成时苦苦挣扎。特别是,我发现这两种方法在测试继续之前等待异步函数完成,但不知道其中的区别(如果有区别的话):。我的目标是在实际测试开始之前等待bepreEach()块中的两个异步函数
我在等待异步功能完成时苦苦挣扎。特别是,我发现这两种方法在测试继续之前等待异步函数完成,但不知道其中的区别(如果有区别的话):。我的目标是在实际测试开始之前,在beforeEach()块中等待两个Ja
我正在尝试在我的代码中尽可能多地使用 data-cy。 必须一直编写 cy.get('[data-cy=name]') 有点乏味。 是否可以创建一个默认情况下首先尝试查找数据的自定义命令。 所以如果我
我有一种情况,我想在拦截中生成 JWT token 并将其返回到它的主体中。 问题在于,在该 token 的有效载荷中,应该使用另一个拦截的值。 这意味着我只能在拦截期间生成 token 。 cons
findByText来自 Cypress 测试库 https://testing-library.com/docs/cypress-testing-library/intro 和 contains C
我们在本地测试的应用程序有一个运行在 上的前端和后端。本地主机:4200 和 127.0.0.1:8000 , 分别。 打电话时cy.visit('/somepage')我们希望它有一个不同的 bas
我有一个编辑器页面。当我添加任何内容并单击“保存”按钮时,我的 URL 将更改,在 URL 中添加一个随机 ID。我想在每次单击“保存按钮”时检查我的 ID 是否在更改。 我将 URL 结果保存在变量
我正在尝试在每次测试之前使用 Cypress 进行编程登录。我的 token 保存在 localStorage 中。如果我同步更改它,即简单地做 localStorage.setItem不涉及cy.r
Cypress.io 中的 cy.readFile 和 cy.fixture 有什么区别?我们应该在什么情况下使用 cy.readFile 和 cy.fixture ? cy.readFile('me
看起来它们是相同的。 cy.get("a").find("b") 和 cy.get("a b") 之间的输出有什么不同吗? (其中a和b是一些选择器,例如div和span,或者。 someClass
我想使用 cypress-audit 进行灯塔测试,但在完成他们在 https://www.npmjs.com/package/cypress-audit 上所说的一切之后它不起作用。我可以在 cyp
我试图在请求正文上断言以确保正确的新测试卡作为订单的一部分被传递。 it("User clicks confirm & pay button to complete order", () => {
我想在 CDialog 的 OnInitDialog 期间获取 cx 和 cy。 我可以用下面的代码做到这一点: myDialog::OnInitDialog() { CRect rcWindow
在使用 Cypress 一段时间后,我注意到 cy.wrap() 有一个奇怪的行为。虽然在钩子(Hook)之前将字符串包装在内部,但表示字符串在所有进一步测试中都可用,但对象仅在第一次测试中可用,而在
我需要一些关于如何处理以下情况的帮助。有一个模式,当关闭时发送 AJAX 请求,如果响应成功,则重绘 Datatables 表。我需要在触发 draw.dt 事件后测试表格的内容。 我获得了对表的引用
我正在尝试匹配网址的一部分 http://www.mywebsite.com/get-stuff在 cypress 中,并且无法弄清楚如何编写正则表达式匹配。 我试过: cy.contains('ht
在改用哈希路由器之前,我经常执行 cy.url 命令,以确保整个应用程序中的链接导航到正确的 URL 地址。现在我们使用哈希路由 cy.url 不再生成字符串,而是生成函数。有什么想法可以解决这个问题
我试图依次选择两个按钮,一个“删除”按钮,然后选择"is"弹出确认窗口,方法如下: cy.get('.btn-danger').last().click(); cy.get('.btn-primary
我已经在测试项目中安装了 ESlint,它开始显示我需要解决的一些错误 错误之一是在 cy.request('someURL'); 错误是 cy 未定义 所以我在这样的文件顶部添加了一个导入语句 im
我是一名优秀的程序员,十分优秀!