Jasmine spyOn 与多个 returns
Jasmine spyOn with multiple returns
我想用 Jasmine 测试我的 angular 应用程序。
所以我创建了一些测试,其中大部分都运行良好。
但是,我的功能之一要求用户填写提示。
测试不能填这个提示,所以我用spyOn(window,'prompt').and.returnValue('test')
嘲讽了他们。这有效,但只有一次。
当我添加我的两个组件(提示所在的函数)时,我想 spyOn
第一个提示结果为 'test',第二个提示结果为 'test2'.我试过这样做:
it 'should place the component as last object in the form', ->
spyOn(window, 'prompt').and.returnValue('test')
builder.addFormObject 'default', {component: 'test'}
spyOn(window, 'prompt').and.returnValue('test2')
builder.addFormObject 'default', {component: 'test2'}
expect(builder.forms['default'][0].name).toEqual('test')
但这会产生以下错误:Error: prompt has already been spied upon
这很合乎逻辑,但我不知道 return 使用 spyOn 的另一种方法。
所以,我想要的是:
在第一个 addFormObject 之前,我想监视 returns 'test' 的提示。我想用 return 'test2'
监视第二个 addFormObject
使用 spyOn,您可以 return 模拟值并像下面的代码一样动态设置它
it 'should place the component as last object in the form', ->
mockedValue = null
spyOn(window, 'prompt').and.returnValue(mockedValue)
mockedValue = 'test'
builder.addFormObject 'default', {component: 'test'}
mockedValue = 'test2'
builder.addFormObject 'default', {component: 'test2'}
expect(builder.forms['default'][0].name).toEqual('test')
But this gives the following error: Error: prompt has already been
spied upon
正确的做法是这样的:
var spy = spyOn(window, 'prompt');
...
spy.and.returnValue('test')
...
spy.and.returnValue('test2')
自 jasmine v2.5 起,使用全局 allowRespy()
设置。
jasmine.getEnv().allowRespy(true);
当您不想 and/or 访问第一个间谍时,您可以多次调用 spyOn()
。当心它会 return 之前的间谍,如果有任何已经激活的话。
spyOn(window, 'prompt').and.returnValue('test')
...
spyOn(window, 'prompt').and.returnValue('test')
我想用 Jasmine 测试我的 angular 应用程序。
所以我创建了一些测试,其中大部分都运行良好。
但是,我的功能之一要求用户填写提示。
测试不能填这个提示,所以我用spyOn(window,'prompt').and.returnValue('test')
嘲讽了他们。这有效,但只有一次。
当我添加我的两个组件(提示所在的函数)时,我想 spyOn
第一个提示结果为 'test',第二个提示结果为 'test2'.我试过这样做:
it 'should place the component as last object in the form', ->
spyOn(window, 'prompt').and.returnValue('test')
builder.addFormObject 'default', {component: 'test'}
spyOn(window, 'prompt').and.returnValue('test2')
builder.addFormObject 'default', {component: 'test2'}
expect(builder.forms['default'][0].name).toEqual('test')
但这会产生以下错误:Error: prompt has already been spied upon
这很合乎逻辑,但我不知道 return 使用 spyOn 的另一种方法。
所以,我想要的是: 在第一个 addFormObject 之前,我想监视 returns 'test' 的提示。我想用 return 'test2'
监视第二个 addFormObject使用 spyOn,您可以 return 模拟值并像下面的代码一样动态设置它
it 'should place the component as last object in the form', ->
mockedValue = null
spyOn(window, 'prompt').and.returnValue(mockedValue)
mockedValue = 'test'
builder.addFormObject 'default', {component: 'test'}
mockedValue = 'test2'
builder.addFormObject 'default', {component: 'test2'}
expect(builder.forms['default'][0].name).toEqual('test')
But this gives the following error: Error: prompt has already been spied upon
正确的做法是这样的:
var spy = spyOn(window, 'prompt');
...
spy.and.returnValue('test')
...
spy.and.returnValue('test2')
自 jasmine v2.5 起,使用全局 allowRespy()
设置。
jasmine.getEnv().allowRespy(true);
当您不想 and/or 访问第一个间谍时,您可以多次调用 spyOn()
。当心它会 return 之前的间谍,如果有任何已经激活的话。
spyOn(window, 'prompt').and.returnValue('test')
...
spyOn(window, 'prompt').and.returnValue('test')