Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在摩卡测试方法链_Javascript_Mocha.js - Fatal编程技术网

Javascript 在摩卡测试方法链

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

我有这样一种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 (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!!我在发帖后不久就意识到了这一点,但我再也没有回到这个问题上来。谢谢你的回答!它将作为一个参考点!