有一个示例应用程序有一个级别的db Node JS库,但我的服务器当前没有安装级别的db,我也不需要它。
我如何编写一个简单的类来模拟API调用。
store变量是我想模拟的库,它有两个API调用:
store.put
store.get
它有两个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包装器的原因,我不确定这是异步调用还是?
发布于 2018-08-18 03:51:24
您可以只创建一个带有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"))
发布于 2018-08-18 03:57:27
也许我的答案不符合你的问题,但是为了模拟你的库,你可以创建你自己的存储
const store = function () {
var data = {};
return {
put: function(id, props, fn) {
data[id] = props;
fn(null);
},
get: function(id, fn) {
fn(null, data[id]);
}
}
}();
如果你像这样定义你的存储,你就是在模仿你的库
https://stackoverflow.com/questions/51901937
复制相似问题