如何使用Jasmine2测试链式Knex方法?
我有以下课程和规范:
任务类
class Task {
// ...
findBy(field, value) {
return this.Knex(this.tableName).where(field, value)
}
// ...
}
任务规范
// ...
beforeEach(() => {
task = new Task()
spyOn(task, 'Knex').and.returnValue(Q.when({}))
spyOn(task.Knex, 'where').and.returnValue(Q.when({})) // <<< Wrong (where() isn't part of Knex anymore)
})
it('should expose findBy()', () => {
let field = 'id'
, value = 1
task.findBy(field, value)
expect(task.Knex).toHaveBeenCalledWith(task.tableName)
expect(task.Knex.where).toHaveBeenCalledWith(field, value)
})
// ...
我得到的错误信息是:
TypeError: this.Knex(...).where is not a function
答案 0 :(得分:0)
从第一个spyOn()
返回错误。返回是一个承诺,没有where()
作为其中的一部分。
这解决了问题(但失去了从第一个spyOn()
beforeEach(() => {
task = new Task()
knexRes = (spyOn(task, 'Knex').and.returnValue(({
where: function() {}
})))()
spyOn(knexRes, 'where').and.returnValue(Q.when({}))
})
it('should expose findBy()', () => {
let field = 'id'
, value = 1
task.findBy(field, value)
expect(task.Knex).toHaveBeenCalledWith(task.tableName)
expect(knexRes.where).toHaveBeenCalledWith(field, value)
})