我目前正在使用Chakram
API测试框架来测试一些REST API端点。
第一个API获得CSRF
令牌,该令牌在headers
的其余端点中使用。
CSRF
API返回一个JSON对象 - 类似这样的
{
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端点测试失败。我硬编码了令牌的值,然后测试开始工作。但是,我不想每次都这样做(我计划将其部署为管道的一部分)。
这个问题似乎是在Mocha的描述上下文之外无法访问变量。是对的吗?如果是这样,我该如何克服它?
答案 0 :(得分:0)
您可以在describe
之外声明变量,然后从外部导出' describe'。
我注意到关于行的其他事情:
csrf_tok = response.body.csrf_token;
应该是:
csrf_tok = resp.response.body.csrf_token;
答案 1 :(得分:0)
这不能回答你的具体问题,但我需要类似的东西 - 我需要获得一个可以传递给其他测试的身份验证令牌。 我使用shared.js文件中的before hook进行了此操作
before ( function getToken (done) {
chai.request(host)
.post(tokenURL)
.send({my params})
.end(function(err, response){
... getToken expectations
this.myToken = response.token;
done();
});
});
然后在test.js文件中你只需使用'myToken',只要你的shared.js文件在根测试目录中 见https://gist.github.com/icirellik/b9968abcecbb9e88dfb2