我目前正在尝试用apiary.io描述一个现有的API。系统通过返回包含会话id的http-cookie的登录请求来实现认证。
据我所知,浏览器在发出另一个请求时,会将先前从主机收到的所有http-cookie发回给他,这是标准的做法。
在运行由我的蓝图文件生成的测试时,这似乎不是由Dredd完成的。正因为如此,任何需要用户登录的请求对于测试都不能正常工作。
是否有可能将请求分别标记为“在运行此请求之前”,以强制Dredd管理这些http-cookie?
顺便说一句,REST服务是在node.js的mvc框架Sails.js中实现的。
发布于 2015-05-09 09:46:01
这是旧的,但我刚刚遇到了同样的问题,并且dredd文档非常过时(这不是很讽刺吗?!),所以既然我想出来了,这可能会对某些人有帮助:)
您可以使用hooks读取和覆盖响应和请求正文和头部(这是我在该主题中找到的最新页面,但仍然存在问题和打字错误)。需要注意的是,dredd似乎没有cookie的帮助器,因此您必须自己解析和构建cookie头文件。
在我的例子中,sessionId返回到json主体以及cookie中:我解析了主体,因为这样更容易,但如果需要,您可以很好地从响应cookie中检索会话。下面是我为使auth工作而编写的大致钩子:
hooks = require('hooks');
stash = {}
// hook to retrieve session on a login
hooks.after('Auth > /remoteauth/userpass > POST', function(transaction){
stash['token'] = JSON.parse(transaction.real.body)['sessionId'];
});
// hook to set the session cookie in all following requests
hooks.beforeEach(function(transaction){
if(stash['token'] != undefined){
transaction.request['headers']['Cookie'] = "id=" + stash['token']
};
});The docs解释如何设置钩子,尽管有一件事让我感到困惑,那就是如果您在同一目录中有一个dredd.yml文件,那么dredd命令将无法工作(似乎该文件的存在会使dredd忽略所有命令行参数)。
发布于 2014-05-13 04:38:48
Dredd旨在针对测试环境设置运行,例如,在带有测试夹具的CI工具中。它不应该在生产环境中运行。
话虽如此,有时可能需要在测试端点时执行设置或拆卸操作。它计划最终提供test scenarios。
如果你需要安装/拆卸功能,你可以使用here中讨论的Dredd“钩子”。
https://stackoverflow.com/questions/23504595
复制相似问题