Javascript 在摩卡测试方法链
我有这样一种ES6方法:Javascript 在摩卡测试方法链,javascript,mocha.js,Javascript,Mocha.js,我有这样一种ES6方法: /** * Builds a knex object with offset and limit * @param {Object} pagination * @param {number} pagination.count - limit query to * @param {number} pagination.start - start query at * @returns {QueryBuilder} */ buildPagination (paginatio
/**
* Builds a knex object with offset and limit
* @param {Object} pagination
* @param {number} pagination.count - limit query to
* @param {number} pagination.start - start query at
* @returns {QueryBuilder}
*/
buildPagination (pagination) {
if (_.isEmpty(pagination)) {
return this;
}
let count = pagination.count;
let start = pagination.start;
this.knex = this.knex.offset(start);
if (count !== undefined) {
this.knex = this.knex.limit(count);
}
return this;
}
我的测试结果如下:
describe("#buildPagination", () => {
let knex;
let b;
let pagination;
beforeEach(() => {
knex = sinon.stub();
knex.offset = sinon.stub();
knex.limit = sinon.stub();
b = new QueryBuilder(knex);
pagination = {
start: 3,
count: 25
};
});
it.only("should attach limit and offset to knex object", () => {
let res = b.buildPagination(pagination).knex;
console.log(res);
assert(res.offset.calledOnce);
assert(res.offset.calledWith(3));
assert(res.limit.calledAfter(res.offset))
// assert(res.knex.limit.calledWith(25));
});
});
我遇到的错误是
TypeError:无法读取未定义的属性“limit”
。此行发生错误:this.knex=this.knex.limit(count)代码>这里是一个独立的演示:
var knex = sinon.stub();
knex.limit = sinon.stub();
knex.offset = sinon.stub();
knex = knex.offset();
此时,knex
是未定义的
,因为存根实际上不会返回任何内容。当您随后调用knex.limit()
时,您会得到一个TypeError
如果要允许链接,则方法存根需要返回knex
存根:
knex.limit = sinon.stub().returns(knex);
knex.offset = sinon.stub().returns(knex);
这里的价值是多少?this.knex=this.knex.offset(开始)。无法读取undefined的属性“limit”表示this.knex未定义。啊,你说得对。无法找到knex属性的原因是没有检查limit调用就运行此测试,它将通过Hanks!!我在发帖后不久就意识到了这一点,但我再也没有回到这个问题上来。谢谢你的回答!它将作为一个参考点!