У меня есть конечная точка, которая выполняет внешний вызов 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, я бы тоже хотел услышать ваше мнение. Спасибо.