我目前正在使用Chakram API测试框架来测试一些REST API端点。
第一个API获取一个CSRF令牌,该令牌在headers中的其余端点中使用。
JSON返回一个CSRF对象,如下所示
{
csrf_token : Aajkndaknsda99/adjaj29adja
}这就是我现在所做的
describe('Hits the CSRF API to get the token',()=>{
let csrf_tok;
before(()=>{
return chakram.wait(response = chakram.get(API_ENDPOINT,headers));
});
it('gets the csrf token from the response',()=>{
return response.then(function(resp){
csrf_tok = response.body.csrf_token;
console.log(csrf_tok) //works fine and I can see the value correctly
exports.csrf = csrf_tok;
});
});
});在我的另一个文件中,我需要使用CSRF令牌,我这样做
var token = require('../test/csrf_token');
var options ={
headers :{
//other headers
CSRF-TOKEN : token.csrf;
}
}但是,这不起作用,并且由于令牌作为undefined传递,其余的API端点测试都会失败。我对token的值进行了硬编码,然后测试开始工作。但是,我不想每次都这样做(我计划将其作为管道的一部分进行部署)。
这个问题似乎是在Mocha的describe上下文之外无法访问该变量。是那么回事吗?如果是这样,我该如何克服它呢?
发布于 2018-04-16 08:12:00
您可以在describe外部声明变量,然后从外部'describe‘中导出它。
关于line我注意到的另一件事是:
csrf_tok = response.body.csrf_token;它应该是:
csrf_tok = resp.response.body.csrf_token;发布于 2018-05-03 21:47:29
这并没有回答你的具体问题,但我需要一些类似的东西-我需要获得一个身份验证令牌,然后可以传递给其他测试。我在一个shared.js文件中使用了一个before钩子
before ( function getToken (done) {
chai.request(host)
.post(tokenURL)
.send({my params})
.end(function(err, response){
... getToken expectations
this.myToken = response.token;
done();
});
});然后,只要您的shared.js文件位于根测试目录中,您就可以在test.js文件中使用'myToken',请参阅https://gist.github.com/icirellik/b9968abcecbb9e88dfb2
https://stackoverflow.com/questions/49820756
复制相似问题