【发布时间】:2021-05-21 21:00:46
【问题描述】:
我是编写 mocha 单元测试的新手,想问一下以下代码的单元测试是什么样子的(尤其是 BigQuery 部分)。该代码位于 PubSub 触发的 Cloud Function 中,并将行插入到 BigQuery 表中:
/**
* Triggered from a message on a Cloud Pub/Sub topic.
*
* @param {!Object} event Event payload.
* @param {!Object} context Metadata for the event.
*/
const {BigQuery} = require('@google-cloud/bigquery');
const bigqueryClient = new BigQuery();
const dataset = 'dataset_name';
const table = 'table_name';
exports.sendtobigquery = (event, context) => {
const pubsubMessage = Buffer.from(event.data, 'base64').toString();
BigQueryInsert(pubsubMessage, dataset, table);
};
async function BigQueryInsert(pubsubMessage, dataset, table) {
const date = new Date().toISOString(); // new date
const rows = [{field1: pubsubMessage, field2: date}]; // new field2
await bigqueryClient
.dataset(dataset)
.table(table)
.insert(rows);
}
我在这里看到 Mocking ES6 BigQuery class 应该使用 sinon 和 proxyquire,但我不明白如何为我的代码准确地做到这一点。
感谢任何帮助。
更新:
我添加了一个新的日期字段作为该行的一部分,但是在单元测试方面我也遇到了麻烦。对于我尝试在index.test.js 中使用sinon.useFakeTimers 的日期,来自这样的答案
describe('66267929', () => {
const now = new Date();
const date = sinon.useFakeTimers(now.getTime());
beforeEach(() => {
sinon.restore();
});
afterEach(() => {
sinon.restore();
});
it('should pass', async () => {
... // same code
... // same code
sinon.assert.calledWithExactly(bigqueryClientStub.insert, [{ field1: 'teresa teng', field2: date }]);
});
});
但这导致“AssertError:预期存根被调用一次但被调用 0 次”。如何做到这一点?
【问题讨论】:
标签: node.js unit-testing google-bigquery sinon