javascript - 具有多个返回值的 Jasmine spyOn

标签 javascript angularjs coffeescript jasmine

我想用 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')

但这会产生以下错误:错误:提示已被监视 这是很合逻辑的,但我不知道用 spyOn 返回的另一种方法。

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

最佳答案

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

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

相关文章:

javascript - laravel5.0中HTML select标签的动态选择

javascript - JSON 数据未保存在 WebAPI 中

javascript - 如何在 Angular 中启用 PouchDB 调试

ruby-on-rails - 如何在 coffeescript for rails 中检查测试环境?

javascript - 如何删除元素数组上的属性?

php - 如何比较 AngularJS 表单数据和 MySQL 数据库 (PHP) 中的值?

javascript - mouseMove 不适用于 Selenium 和 Protractor

javascript - CoffeeScript 私有(private)类实例变量

javascript - 无法将 NeDB Node 回调转换为 Bacon EventStream

javascript动画因上面的元素而减慢