【发布时间】:2014-12-02 07:56:48
【问题描述】:
我正在尝试为使用 aws-sdk NPM 模块的应用程序编写一些测试覆盖率,该模块将事物推送到 SQS 队列,但我不确定如何正确地模拟事物。
这是我目前的测试:
var request = require('superagent'),
expect = require('chai').expect,
assert = require('chai').assert,
sinon = require('sinon'),
AWS = require('aws-sdk'),
app = require("../../../../app");
describe("Activities", function () {
describe("POST /activities", function () {
beforeEach(function(done) {
sinon.stub(AWS.SQS.prototype, 'sendMessage');
done();
});
afterEach(function(done) {
AWS.SQS.prototype.sendMessage.restore();
done();
});
it("should call SQS successfully", function (done) {
var body = {
"custom_activity_node_id" : "1562",
"campaign_id" : "318"
};
reqest
.post('/v1/user/123/custom_activity')
.send(body)
.set('Content-Type', 'application/json')
.end(function(err, res) {
expect(res.status).to.equal(200)
assert(AWS.SQS.sendMessage.calledOnce);
assert(AWS.SQS.sendMessage.calledWith(body));
});
});
});
});
我看到的错误是:
1) Activities POST /activities "before each" hook:
TypeError: Attempted to wrap undefined property sendMessage as function
2) Activities POST /activities "after each" hook:
TypeError: Cannot call method 'restore' of undefined
对于sinon.stub 或在 JavaScript 中模拟对象,我有点新手,所以请原谅我的无知
【问题讨论】:
-
您找到解决方案了吗?
-
@hyprstack 见过/尝试过 aws-sdk-mock npm 模块吗? (见下面的答案)
-
@nelsonic 当时我设法用proxyquire 和 sinon 存根服务并让它工作。我还没有看过 aws-sdk-mock。你用过吗?
-
@hyprstack 是的,我们正在使用 aws-sdk-mock(简化了
Sinon.Stub):-)