如何从Mocha描述块

时间:2018-04-13 15:44:22

标签: javascript mocha web-api-testing chakram

我目前正在使用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的描述上下文之外无法访问变量。是对的吗?如果是这样,我该如何克服它?

2 个答案:

答案 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