Sinon.stub AWS.SQS.sendmessage

问题描述 投票:0回答:1

我是Node和AWS的新手,正在尝试执行简单的操作。

我写了一个简单的方法,可以将消息发送到AWS SQS:

public async sendMessageToQueue(item: any): Promise<void> {
    try {
        const message = {
            MessageBody: JSON.stringify(item),
            QueueUrl: AWSSQSUrl
        };
        await this._sqs.sendMessage(message).promise();
    } catch (err) {
        Utils.getLogger().logInfo(`Error adding item to AWS SQS ${err}`);
        throw new Errors.BadRequestError(`Error adding item to AWS SQS ${err}`);
    }
}

我已经对该方法编写了如下测试:

describe('AWSSQSCollection tests', () => {
let instance: AWSSQSCollection;

let sendMessageStub: sinon.SinonStub;

beforeEach(() => {
    sendMessageStub = AWS.SQS.prototype.sendMessage = sinon.stub().withArgs(sinon.match.any);
});

afterEach(() => {
    sinon.restore();
});

describe('Send message to SQS', () => {
    it('generate valid message', async () => {
        const expectedMessage = {
            MessageBody:some body...,
            QueueUrl: AWSSQSUrl
        };
        sendMessageStub.returns({ promise: () => Promise.resolve(true) });
        instance = new AWSSQSCollection();
        await instance.sendMessageToQueue(getValidAWSSQSElement());
        chai.assert(sendMessageStub.calledOnceWithExactly(expectedMessage));
    });

    it('bad path', async () => {
        const errorMessage: Error = new Error('test error');
        sendMessageStub.returns({ promise: () => Promise.reject(errorMessage) });
        instance = new AWSSQSCollection();
        await expect(instance.sendMessageToQueue(getValidSQSElement())).to.be.rejectedWith(
            Errors.BadRequestError,
            `Error adding item to AWS SQS ${errorMessage}`
        );
    });
});

});

[当我自己运行测试(仅使用.only)时,它通过了,但是当我运行项目的所有测试时,出现以下错误:

BadRequestError:将项目添加到AWS SQS UnknownEndpoint:无法访问的主机:'test'。 [us-east-2]地区可能无法使用此服务。

重要信息-那是代码中与AWS交互的唯一位置,并且没有其他相关测试。看起来在与其他项目的测试一起运行时,存根并没有真正取代对AWS.SQS函数“ sendMessage”的调用。但是如何独立工作呢?而且-仅当不独立运行时,主机才会出现问题吗?有谁有想法吗?谢谢

node.js amazon-sqs sinon stub aws-sdk-js
1个回答
0
投票

这里是工作示例:

© www.soinside.com 2019 - 2024. All rights reserved.