模拟另一个模块中的代码
Mock code in another module
我想嘲笑Amazon AWS S3 getObject
我要测试的代码如下:它在helper.js
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.get_data_and_callback = function(callback, extra){
s3.getObject( {Bucket: SRC_BUCKET, Key: SRC_KEY},
function (err, data) {
if (err != null) {
console.log("Couldn't retrieve object: " + err);
}else{
console.log("Loaded " + data.ContentLength + " bytes");
callback(data, extra);
}
});
}
test/helper_test.js
,我编写了一个测试,应该模拟模块AWS的
var assert = require('assert');
var mockery = require('mockery');
describe("helper", function() {
it('loads and returns data from S3 to a callback', function(){
mockery.enable();
var fakeaws = {
S3: function(){
return {
getObject: function(params, callback){
callback(null, "hello")
}
}
}
}
mockery.registerSubstitute('aws-sdk', fakeaws);
function replace_function(err, data){
console.log(data);
}
require('../helper.js').get_data_and_callback(replace_function, null);
});
});
当我在测试文件中需要 AWS 时test/helper_test.js
如下所示:
aws = require('aws-sdk');
s3 = new aws.S3;
s3.getObject(replace_function)
然后我的代码工作,它打印出hello
.
但是执行require('../helper.js').get_data_and_callback(replace_function, null);
没有像预期的那样工作,AWS 保持不变,它没有被我的假货取代。我做错了什么?您是否有其他解决方案来替换S3
我们创建了一个 aws-sdk-mock npm 模块,用于模拟所有 AWS 开发工具包服务和方法。 https://github.com/dwyl/aws-sdk-mock
它真的很容易使用。只需使用服务、方法和存根函数调用 AWS.mock。
AWS.mock('S3', 'getObject', function(params, callback) {
callback(null, 'success');
});
然后在测试后通过调用以下命令还原方法:
AWS.restore('S3', 'getObject');
这适用于 as-sdk 中的每个服务和方法。
相关文章:
- Webpack通过npm将代码拆分为单独的模块,以及如何编译es6
- TypeScript代码类似于揭示模块模式结构
- 模块化&重用使用ExtJS编写的代码
- 找不到模块 './build/Release/bson'] 代码: 'MODULE_NOT_FOUND' } js-bs
- 将JavaScript代码迁移到具有String.prototype扩展名的node.js模块
- 如何在nodejs中模块化代码
- 类代码结构,使用非立即执行的模块模式变体
- 为什么这段代码会导致使用phantom模块的Node.js挂起
- 使用解析云代码模块通过 SendGrid 发送附件
- 我如何实例化不同页面上的 require.js 模块,带有代码点火器的部分
- 如何在 joomla 模块管理中添加 php 代码
- 浏览器化只执行一次模块代码,在多个需要调用上
- 如何在 YUI 模块中运行代码
- 是否可以包含许多.js文件以使我的代码看起来模块化
- RequireJS:如何处理浏览器和服务器之间共享的代码的不同模块依赖关系
- 如何在模块中测试 OpenCV nodejs 绑定代码
- WebStorm JSDoc 类声明,用于使用 node.js 模块完成代码
- 条带云代码模块 Parse.com 的限制
- 如何从Parse.com云代码模块返回响应
- 如何从云代码模块返回Parse承诺