我是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”的调用。但是如何独立工作呢?而且-仅当不独立运行时,主机才会出现问题吗?有谁有想法吗?谢谢
这里是工作示例: