Jest - одна из самых популярных тестовых сред, используемых в JavaScript. Написав тестовые примеры, вы можете быть уверены, что недавно добавленная функция не будет содержать ошибок и не повлияет на ваши существующие. Это делает ваше приложение более надежным, эффективным, а также гарантирует качество приложения. Использование сторонних сервисов и библиотек - обычная часть современных проектов. Код, написанный в вашем проекте, легко протестировать, потому что вы полностью контролируете его. Но контролировать поведение сторонних сервисов сложно и для решения этой проблемы мы имитируем сторонний сервис.
Кроме того, рекомендуется тестировать только свой код, а не код, импортированный из других мест. В идеале тестовые примеры, написанные поставщиком, должны охватывать эту часть. Мокинг просто позволяет вам заменить фактическую реализацию поддельным / фиксированным набором желаемого результата. Razorpay - один из популярных платежных шлюзов в Индии, который разработчик использует для онлайн-платежей.
Давайте посмотрим, как мы можем имитировать Razorpay API, чтобы протестировать наши API с помощью Jest.
Шаг 1: реализация API
Ниже приведен код, который показывает фактическую реализацию Razorpay API в index.js. Чтобы узнать больше об интеграции Razorpay с Node.js, прочтите здесь.
const Razorpay = require('razorpay') const rzp = new Razorpay({ key_id: "YOUR_KEY_ID", key_secret: "YOUR_KEY_SECRET", }) router.post('/create_order', async (req, res) => { try { const rzpOrder = await rzp.orders.create({ amount: amount * 100, // rzp format with paise currency: 'INR', receipt: "receipt#1" //Receipt no that corresponds to this Order, payment_capture: true, notes: { orderType: "Pre" } //Key-value pair used to store additional information }) res.send(rzpOrder) } catch (err) { res.status(501).send(err.message) } })
Шаг 2: насмешка API
Теперь давайте полностью смоделируем модуль Razorpay, вернув фиксированный набор выходных данных для каждой реализации Razorpay API.
jest.doMock('razorpay', () => { return jest.fn(() => ({ customers: { create: jest.fn(() => Promise.resolve({ id: 'cust_123', name: "Jest_User", currency: "sgd", description: "Jest User Account created", })), }, orders: { create: jest.fn(() => Promise.resolve({ id: '7JS8SH' })), fetchPayments: jest.fn(() => Promise.resolve([{ "entity":"collection", "count":1, "items":[{ "id":"pay_DaaSOvhgcOfzgR", "entity":"payment", "amount":2200, "currency":"INR" }] }])), }, subscriptions: { fetch: jest.fn(() => Promise.resolve({ id: 'sub_00000000000001', "entity": "subscription", "plan_id": "plan_00000000000001", })), cancel: jest.fn(() => Promise.resolve({ "id": "sub_00000000000001", "entity": "subscription", })), }, })); });
После имитации Razorpay давайте запишем тестовый пример в файл index.test.js и проверим API создания учетной записи.
const request = require('supertest') const app = require('../../app') const client = request(app) const urlPrefix = '/' let tokendescribe('Create order', () => { it('should create order', async () => { const res = await client.post(`${urlPrefix}/create_order`) .send({ amount: "2200", currency: "inr", partial_payment: true, }) expect(res.status).toEqual(200) }) })
Когда вы запустите указанный выше тестовый файл, вы получите идентификатор заказа как 7JS8SH вместо Фактический идентификатор заказа, потому что вы имитировали Razorpay API. Вы можете узнать больше о Razorpay и доступных функциях в официальной документации.
Спасибо за внимание. Если вам понравился пост, нажмите кнопку хлопка или оставьте комментарий.
Первоначально опубликовано на https://noob2geek.in 15 апреля 2021 года.
Больше контента на plainenglish.io