【问题标题】:Mocha - why before() was not finished 'before' it and how can I do that?摩卡 - 为什么 before() 没有在它之前完成,我该怎么做?
【发布时间】:2019-10-22 09:23:11
【问题描述】:

我需要在之前调用 API 请求(post lib.js)并在 it 中检查结果。

无论我尝试什么,每次执行 it 在完成之前 before 并且 res 变量为空,如您在输出的开头 - 就在带有井号的毫秒下方。

test.js

const lib = require('../lib/lib.js');
global.serverurl = process.env.SERVERURL;

describe('Template Scenario', function () {

    global.loginData = require('../data/template.json');

    describe('Login user', function () {

        var res;

        before(function () {
            res = lib.post('/rest/security/login/', {username: loginData.username, password: loginData.password});
        });

        it('should return right status code', function () {
            console.log('###########################'+Date.now());
            console.log(JSON.stringify(res));
            res.should.have.status(200);
        });

lib.js

const chai = require('chai');
chai.use(require('chai-http'));

exports.post = function (api_endpoint, request_body) {
    return chai.request(serverurl)
    .post(encodeURI(api_endpoint))
    .send(request_body)
    .then(function (r) {
        console.log('***************************'+Date.now());
        console.log(JSON.stringify(r));
    });
}

输出

  Template Scenario
    Login user
###########################1571734950189
{}
      1) should return right status code


  0 passing (59ms)
  0 pending
  1 failing

  1) Template Scenario
       Login user
         should return right status code:
     AssertionError: expected {} to have keys 'status', or 'statusCode'



***************************1571734950409
{"req":{"method":"post","url":"https:// ....

【问题讨论】:

    标签: mocha.js chai chai-http


    【解决方案1】:

    已解决

    当我将 before 更改为 async,并在 post 函数中删除 then 时,它按预期工作。

    test.js

    const chai = require('chai');
    const should = chai.should();
    const lib = require('../lib/lib.js');
    global.serverurl = process.env.SERVERURL;
    
    var res;
    
    describe('Template Scenario', function () {
    
        global.loginData = require('../data/template.json');
    
        describe('Login user', function () {
    
            before(async function () {
                res = await lib.post('/rest/security/login/', {username: loginData.username, password: loginData.password});
            });
    
            it('should return right status code', function () {
                res.should.have.status(200);
            });
    

    lib.js

    const chai = require('chai');
    chai.use(require('chai-http'));
    
    exports.post = async function (api_endpoint, request_body) {
        return chai.request(serverurl)
            .post(encodeURI(api_endpoint))
            .send(request_body);
    }
    

    输出

      Template Scenario
        Login user
          ✓ should return right status code
          ✓ should return correct Json schema
    
    
      2 passing (97ms)
    

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多