我想用Jasmine测试我的 Angular 应用程序。
因此,我创建了一些测试,其中大多数工作正常。
但是,我的功能之一要求用户填写提示。
测试无法填充此提示,因此我使用spyOn(window,'prompt').and.returnValue('test')对其进行了 mock 。这有效,但是只有一次。

当我添加两个组件(提示所在的函数)时,我想使用结果“test”对第一个提示进行spyOn,并使用“test2”对第二个提示进行Error: prompt has already been spied upon。我尝试这样做,如下所示:

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')

但这会产生以下错误:ojit_code
这是很合逻辑的,但是我不知道通过spyOn返回的另一种方法。

所以,我想要的是:
在第一个addFormObject之前,我想监视返回“test”的提示。我要监视的第二个addFormObject返回'test2'

最佳答案

使用spyOn,您可以返回模拟值并像下面的代码一样动态设置它

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')

关于javascript - Jasmine spyOn与多个返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30707283/

10-11 08:19