Jasmine的间谍在图像加载事件中不起作用

时间:2016-04-16 12:47:46

标签: image asynchronous jasmine onload spy

我正在使用karma-jasmine和browserify来测试Vue组件。一种方法在加载事件上监听图像。但是在事件处理程序中调用的间谍没有得到正确的结果。以下片段显示错误:

let spy = jasmine.createSpy('spy')
spy.and.returnValues({
  name: 'name'
})

describe('example tests', () => {
  it('should pass', (done) => {
    var img = new Image()
    img.onload = function() {
      console.log('2', spy())
      done()
    }
    img.src = "http://dummyimage.com/100x100"
    console.log('1', spy())
  })
})

这里我们是,在位置1,日志显示1,但在位置2,日志显示未定义。

1 个答案:

答案 0 :(得分:1)

您链接到间谍的.and.returnValues函数只返回指定一次的对象all subsequent calls to the spy will return undefined

如果您要执行以下操作:

let spy = jasmine.createSpy('spy')
spy.and.returnValues({
  name: 'name'},
 {name: 'name2'}
)

describe('example tests', () => {
  it('should pass', (done) => {
    var img = new Image()
    img.onload = function() {
    console.log('2', spy())
    done()
    }
    img.src = "http://dummyimage.com/100x100"
    console.log('1', spy())
  })
})

您会发现控制台将记录“1 Object {name:”name“}”,然后记录2 Object {name:“name2”}。

如果您希望间谍始终返回相同的对象,则需要使用.and.returnValue而不是.and.returnValues

let spy = jasmine.createSpy('spy')
spy.and.returnValue({
  name: 'name'})

describe('example tests', () => {
  it('should pass', (done) => {
    var img = new Image()
    img.onload = function() {
    console.log('2', spy())
    done()
    }
    img.src = "http://dummyimage.com/100x100"
    console.log('1', spy())
  })
})