1 回答
TA贡献1827条经验 获得超8个赞
您的代码存在很多问题:
您应该为
connection.end()
方法创建模拟。你不应该将成功的结果传递给
done()
回调您应该返回一个数组来解析 的多个值
connection.then()
。你没有提供
queries
函数,所以我直接传递query
andargs
参数。你传了
args
参数,但是你没有使用它,我下面根据代码的意思使用它
一个工作示例:
testUtils.js
:
const { APILambda } = require('./apiLambda');
// 5. You passed `args` parameter, but you didn't use it, I use it below based on the meaning of code
async function runLambda(args, assertions, done) {
const query = jest.fn(() => {
return Promise.resolve({
name: 'John',
lastName: 'Wayne',
});
});
// 1. create mock for `connection.end()` method.
const end = jest.fn();
// 3. You should return an array to resolve multiple values for connection.then()
const onNewQuery = APILambda(async () => [{ query, end }, args, null]);
const event = {};
const context = {};
await onNewQuery(event, context, (err, result) => {
if (err) done(err);
assertions(query);
// 2. you should NOT pass successful result to done() callback
done();
});
}
module.exports = { runLambda };
apiLambda.js:
exports.APILambda = (databaseConnection) => {
return function(event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;
const connection = databaseConnection();
connection
.then(([connection, query, args]) => {
connection
// 4. You didn't provide `queries` function, so I just pass `query` and `args` parameters directly.
.query(query, args)
.then((result) => {
console.log(result);
connection.end();
callback(null, { data: result });
})
.catch((err) => {
throw err;
});
})
.catch((err) => {
console.error(`${err.stack}`);
callback(err);
});
};
};
apiLambda.test.js:
const { runLambda } = require('./testUtils');
describe('on new query', () => {
it('returns data', async (done) => {
await runLambda(
['person', ['John']],
(query) => {
expect(query).toHaveBeenCalledWith(['person', ['John']], null);
},
done,
);
});
});
单元测试结果:
PASS src/stackoverflow/65179710/apiLambda.test.js (9.195s)
on new query
✓ returns data (16ms)
console.log src/stackoverflow/65179710/apiLambda.js:341
{ name: 'John', lastName: 'Wayne' }
--------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
--------------|----------|----------|----------|----------|-------------------|
All files | 85.19 | 50 | 81.82 | 87.5 | |
apiLambda.js | 75 | 100 | 66.67 | 75 | 18,22,23 |
testUtils.js | 93.33 | 50 | 100 | 100 | 19 |
--------------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 10.556s
添加回答
举报