Nock, Async / Await, Bitbucket: перехват не возвращается до того, как Chai начинает утверждение - PullRequest
1 голос
/ 11 февраля 2020

У меня есть конечная точка, которая выполняет внешний вызов API.


//outside.js
const createTicket = async () => {
    try{
    const someOptions =  { /*stuff here*/}
        results = await rp.post('https://xcxxx.zendesk.api.com/request.json', someOptions)
        return results; 
    }catch(e) {
        return e
    }
}


//router.js
const {createTicket} = required("../outside.js")
router.post("/test", (req, res) => {
    /*do stuff*/
    createTicket();

    return res.status(200).send();
})

//index.js
app.use(require("router.js"));
...


//index.test.js
const server=require("../index.js");  /*test calls index.js, which uses router.js*/
const nock = require("nock");
const chai = require("chai");
/*lots of other requires*/

describe("Should send ticket when POST fails", function(done){
   let ticketNock= nock(`https://xcxxx.zendesk.com`)
                .log(console.log)
                .post('/api/v2/requests.json')
                .reply(200);
    chai.request(server)
                .post("/test")
                .send({info: 'fail this'})
                .then((res) => {

                    expect(ticketNock.isDone()).to.equal(true);


                    nock.restore();
                    nock.cleanAll();
                    done();
                })
                .catch((error) => {
                    done(error);
                })

Когда я тестирую /test, я пытаюсь использовать Nock для перехвата https://external.api.com/request.json. Локально тест проходит нормально, но когда я отправляю sh его в bitbucket и запускаю конвейер, он не перехватывает.

Я предполагаю, что код в router.js не вызывает await.

У меня вопрос, есть ли работа вокруг без изменения исходного кода ? Шпионаж и окурки тоже не могут быть выбором.

В противном случае, если у кого-то есть понимание того, почему это не помогает только Bitbucket, я бы тоже хотел услышать ваше мнение. Спасибо.

...