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
添加回答
舉報