gpt4 book ai didi

node.js - NodeJS 中用于 API 的 stub DynamoDB

转载 作者:行者123 更新时间:2023-12-03 02:12:14 25 4
gpt4 key购买 nike

我在 stub DynamoDB 调用以进行 API 测试时遇到问题。我正在使用无服务器摩卡,想要从端到端的角度测试我的 API。项目结构并不简单,但在 API 文件本身内部,我对不同的类文件进行了单独的调用,以实际使用 DynamoDB 函数。让我们假设它是一个图书馆。因此,我无法使用 aws-sdk-mock,因为“需要在正在测试的函数内初始化 AWS 服务才能模拟 SDK 方法”的要求不是我的情况。如何测试我的 API 并 stub 对 DynamoDB 的调用?现在测试实际上正在工作,但它真正调用了我想避免的数据库:

const isStub = true;

const mochaPlugin = require('serverless-mocha-plugin');
const chaiExclude = require('chai-exclude');

const sinon = require('sinon');

mochaPlugin.chai.use(chaiExclude);

const expect = mochaPlugin.chai.expect;
const assert = mochaPlugin.chai.assert;

let createHandler = mochaPlugin.getWrapper('postStory', '/../../functions/create/create.js', 'handler');

const { constants } = require('core/index');

const localConstants = require('../utils/constants');

const AWS = require('aws-sdk');
const AWSMock = require('aws-sdk-mock');

describe('create', () => {

let dynamoSpy = sinon.spy();

before((done) => {
if (isStub) {
AWSMock.mock('DynamoDB.DocumentClient', 'put', dynamoSpy);
}
done();
});
after((done) => {
if (isStub) {
assert.isTrue(dynamoSpy.calledOnce, 'should make at least one call to DynamoDB via AWS SDK');
AWSMock.restore('DynamoDB.DocumentClient', 'put');
sinon.reset();
}
done();
});

it('should pass object with correct values to save', function () {
return createHandler.run(require('../events/create/create.json')).then((response) => {
console.log(response);
expect(response.statusCode).to.equal(201);
});
});

最佳答案

我遇到了同样的问题,我通过使用 sinon 解决了它,请查看如何 stub Dynamo 函数,然后测试你想要的任何内容:

import {expect} from 'chai';
import * as AWS from 'aws-sdk';
import * as sinon from 'sinon';

let result = {
// your result
}
let sinonSandbox;

beforeEach((done) => {
sinonSandbox = sinon.createSandbox();
done();
})

afterEach((done) => {
sinonSandbox.restore()
done();
})

it('your test', async () => {
sinonSandbox.stub(AWS.DynamoDB.DocumentClient.prototype, 'put').returns({
promise: function () {
return Promise.resolve(result);
}
});

return createHandler.run(require('../events/create/create.json')).then((response) => {
console.log(response);
expect(response.statusCode).to.equal(201);
});
});

在此示例中,我对 Promise 实现进行了 stub ,我相信您可以使用如下回调对 put 进行 stub :

sinonSandbox.stub(AWS.DynamoDB.DocumentClient.prototype, 'put').returns((params,callback) => {
callback(null,result);
});

关于node.js - NodeJS 中用于 API 的 stub DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50843673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com