У меня есть JSON API, построенный с помощью koa, который я пытаюсь покрыть интеграционными тестами.Как издеваться над внешним сервисом при тестировании NodeJS API
Простой тест будет выглядеть следующим образом:
describe("GET: /users", function() {
it ("should respond", function (done) {
request(server)
.get('/api/users')
.expect(200, done);
});
});
Теперь проблема возникает, когда действия за контроллер - позволяет говорить saveUser на POST/пользователей - использование внешних ресурсов. Например, мне нужно проверить номер телефона пользователя.
Мой контроллер выглядит следующим образом:
save: async function(ctx, next) {
const userFromRequest = await parse(ctx);
try {
// validate data
await ctx.repo.validate(userFromRequest);
// validate mobile code
await ctx.repo.validateSMSCode(
userFromRequest.mobile_number_verification_token,
userFromRequest.mobile_number.prefix + userFromRequest.mobile_number.number
);
const user = await ctx.repo.create(userFromRequest);
return ctx.data(201, { user });
} catch (e) {
return ctx.error(422, e.message, e.meta);
}
}
Я надеялся, чтобы иметь возможность дразнить ctx.repo
на объекте запроса, но я не могу показаться, чтобы иметь возможность ухватить на него из теста, это означает, что мои тесты фактически находят службу проверки номера телефона.
Есть ли какие-либо способы, которыми я мог бы воспользоваться удалением этой службы проверки?
Попробуйте найти способ изменения 'ctx' в вашем тесте. Вы могли бы заменить 'ctx.repo' перед запуском фактического контроллера на свой собственный макет. –