如何使用 Jasmine2 测试链式 Knex 方法(/承诺)?
How to test chained Knex methods(/promises) with Jasmine2?
如何使用 Jasmine2 测试链式 Knex 方法?
我有以下 class 和规格:
任务class
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
第一个 spyOn()
中的 return 有错误。 return 是一个没有 where()
的承诺。
这解决了问题(但失去了第一个 spyOn()
的承诺 return
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)
})
如何使用 Jasmine2 测试链式 Knex 方法?
我有以下 class 和规格:
任务class
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
第一个 spyOn()
中的 return 有错误。 return 是一个没有 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)
})