2015-08-06 4 views
1

У меня есть метод ES6 так:JS модульного тестирования метода цепь в Мокко

/** 
* 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: Cannot read property 'limit' of undefined. Ошибка происходит с этой линии: this.knex = this.knex.limit(count);

+0

что значение здесь? this.knex = this.knex.offset (начало). Невозможно прочитать свойство «limit» неопределенных значений this.knex не определено. – dannypaz

+0

А, ты прав. Не имеет смысла, почему он не может найти свойство knex, потому что если я запустил этот тест, не проверив лимит-вызов, он пройдет – dennismonsewicz

ответ

3

Вот автономная демонстрация:

var knex = sinon.stub(); 
knex.limit = sinon.stub(); 
knex.offset = sinon.stub(); 

knex = knex.offset(); 

На данный момент, knex является undefined, потому что ваши окурки на самом деле не возвращать ничего. Когда вы впоследствии звоните knex.limit(), вы получаете TypeError.

Если вы хотите, чтобы цепочки, ваш метод окурки нужно вернуть knex окурок:

knex.limit = sinon.stub().returns(knex); 
knex.offset = sinon.stub().returns(knex); 
+0

Спасибо! Я понял это вскоре после публикации моего вопроса, но так и не вернулся. Спасибо, что ответили! Это будет точкой отсчета! – dennismonsewicz

Смежные вопросы