【发布时间】:2021-05-15 08:30:39
【问题描述】:
我正在对一个 express 函数进行单元测试。 express 函数使用我想模拟的导入(条带)。如何在使用 express 功能时模拟导入?问题是它是一个全局导入,如果我能以某种方式将它作为 express 函数的参数,我的问题就会得到解决。
表达代码(作为firebase_functions.subscribe导出到测试文件)
const functions = require('firebase-functions');
const stripe = require('stripe')(functions.config().stripe.client_id);
module.exports = async function( request, response ) {
if( !request.query.id_token ) {
response.status(400).json({message: 'id_token has not been provided'});
return;
}
await admin.auth()
.verifyIdToken( request.query.id_token )
.then( id_token => {
// pseudo-code: something is done with e.g.
const message = await stripe.xxx( id_token ); // returns 'some result I got using the stripe Mock in the process'
response.status(200).json({message});
return;
})
.catch( error => {
return response.status(401).json({message: 'You are currently not logged in as an authorised user'});
})
}
测试代码摘录
describe('subscribe( request, response)', () => {
it( 'should redirect an user to an url for stripe subscriptions', async() => {
// arrange
const response = new ResponseSpy();
const id_token = await get_id_token();
const request = { query: { id_token }};
// act
await firebase_functions.subscribe( request, response );
// assert
assert.deepStrictEqual( result.json, {message: 'some result I got using the stripe Mock in the process'} );
});
});
【问题讨论】:
标签: node.js firebase unit-testing express stripe-payments