有一个示例应用程序具有一个db Node Node JS库,但是我的服务器当前未安装db db,因此我不需要它。
如何编写一个简单的类来模拟API调用。
store变量是我要模拟的库,它具有2个API调用:
store.put
store.get
它有2个API调用:
const store = level('./data/dbname123', { valueEncoding: 'json' });
save() {
debug(`saving id: ${this.id}`);
const properties = attributes.reduce((props, attr) => {
props[attr] = this[attr];
return props;
}, { fields: this.fields });
return new Promise((resolve, reject) => {
store.put(this.id, properties, (error) => {
if (error) { return reject(error); }
resolve(this);
});
});
}
static find(id) {
debug(`fetching id: ${id}`)
return new Promise((resolve, reject) => {
store.get(id, (error, properties) => {
if (error) { return reject(error); }
resolve(new Ticket(properties));
});
});
}
我该如何快速嘲笑那些?我不太熟悉这种JavaScript样式,但是由于Promise包装程序的原因,我不确定这是异步调用还是?
答案 0 :(得分:1)
您可以在对象上创建具有put
和get
方法的对象,以模拟这些方法的作用。只需确保您的函数遵循预期的约定即可,例如,如果出现问题,则以错误作为第一个参数调用回调。
显然,这可能涉及更多,并且Sinon之类的工具可以帮助您模拟现有功能。
例如:
// simple mocks for store.get and store.put
let store = {
put(id, properties, fn){
// add whatever behavior you need and call callback fn
fn(null) // calling with null indicates no error.
},
get(id, fn){
// make some properties
let props = {
someProperties: "Hello",
id: id
}
// call callback
fn(null, props)
}
}
function save() {
return new Promise((resolve, reject) => {
store.put('id', 'properties', (error) => {
if (error) { return reject(error); }
resolve();
});
});
}
function find(id) {
return new Promise((resolve, reject) => {
store.get(id, (error, properties) => {
if (error) { return reject(error); }
resolve(properties);
});
});
}
// try them out
find("21")
.then(console.log)
save()
.then(() => console.log("done"))
答案 1 :(得分:1)
也许我的答案与您的问题不符,但是要模拟您的库,您可以创建自己的存储空间
const store = function () {
var data = {};
return {
put: function(id, props, fn) {
data[id] = props;
fn(null);
},
get: function(id, fn) {
fn(null, data[id]);
}
}
}();
如果您定义存储空间,就可以模拟库