Как проверить обратный вызов функции в Чай? - PullRequest
0 голосов
/ 29 ноября 2018

Я использую Slack API и хочу проверить, работает ли он нормально с кодом состояния ответа.Вот функция отправки:

    sendMsg(msg) {
      return this.slack.webhook({text: msg}, (err, res) => {
        if (err) {
            throw err;
        }
        console.log(res.statusCode) // = 200
        return res.statusCode;
      });
    }

И мой тест:

    it('Checks connection with Slack', (() => {
      let slack = new Slack();
      let res = slack.sendMsg('test');
      expect(res).to.equal(200);
    }));

Но ofc.это дает мне объект запроса, чтобы расслабиться.Я хочу дождаться ответа объекта из Slack API.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Один из способов обработки обратного обратного вызова для проверки заключается в следующем:

it('receives successful response', async () => { 

nock('https://localhost')
            .persist()
            .log(console.log)
            .post(‘/getData’, (unitData, callback) => {
                return true;
            })
            .delayBody(1000)
            .reply(200, {statusCode: 'Some Status'});

const getSomeData = await getResponse(unitData, function callBack(unitData, error, data){
     expect(data.statusCode).to.be.equal(200); 
}) })

Функция getResponse (возвратный обратный вызов):

getResponse(unitData, function callBack(unitData, error, data){ 
   try {
    return request.post(unitData, function (err, resp) {
        if (!err && resp.statusCode === 200) {
            if (resp.body.error) {
                return callback(obj, JSON.stringify(resp.body.error), null); 
            }
            return callback(obj, null, resp); 
        } else {
            if (err == null) {  
                err = { statusCode: resp.statusCode, error: 'Error occured.' };
            }
            return callback(obj, err, null); 
        }
    });
} catch (err) {
    return callback(obj, err, null);
}
}
0 голосов
/ 29 ноября 2018

Похоже, slack.webhook принимает обратный вызов, который является способом получения статуса.Проблема в том, что вызывающий sendMsg не может получить этот статус.

Одним из способов решения этой проблемы является sendMsg получение обратного вызова:

sendMsg(msg, onStatusReceived) {
  this.slack.webhook({text: msg}, (err, res) => {
    if (err) {
        throw err;
    }
    console.log(res.statusCode) // = 200
    onStatusReceived(res.statusCode);
  });
}

Затем в своем тесте используйте done для завершения теста при вызове обратного вызова:

it('Checks connection with Slack', (done) => {
  let slack = new Slack();
  slack.sendMsg('message', status => {
    expect(status).to.equal(200);
    done();
  });
});

Другим способом является sendMsg завертывание slack.webhook в обещании, чтобы вызывающий мог выполнить sendMsg().then(...).

...