问题标签 [spyon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1067 浏览

angularjs - 使用 Jasmine 2 的 spyOn 测试 Angular 指令

我有一个 AngularJS 指令,我正在尝试使用 Jasmine 2 进行测试。这是我在测试开始时定义的模拟服务。

这是我的测试:

如果我删除第一个期望(它期望 Note.getNotes 被调用),测试通过。否则,它会失败。但是,我可以看到该服务被调用,因为它是用 console.log 打印的。

我的预感是我的 spyOn 必须更改以指示该方法具有参数。

0 投票
0 回答
371 浏览

javascript - 如何在茉莉花中窥探 angular.extend 函数?

我的代码如下:

我想使用 jasmine 检查我是否能够切换选项卡。基本上想监视 queryTab 选项卡的“refreshFunc”。我该怎么做?

无法在 jasmine 测试用例中使用以下语法进行监视。var queriesFunc = spyOn(scope.queriesTab,'refreshFunc');

0 投票
1 回答
58 浏览

javascript - 使用 jasmine 测试控制器是否在 angularjs 中工作

我在尝试测试方法控制器时遇到了一些问题。所以,这是我的控制器,名为contactCtrl

这是我的联系人存储库

这是我的名为 contactCtrl.spec.js 的规范文件

我想测试当我运行 save 方法时是否真的有效。

0 投票
1 回答
1223 浏览

angularjs - 在 Jasmine 中模拟服务并调用

我正在尝试在我的 AngularJS 项目中测试服务。我要做的就是查看我的服务上的方法是否已调用。我认为当您在 jasmine 中使用“and.callThrough()”时,它会为您调用该方法,然后您可以查看它是否被调用。但是,当我测试我的功能时,业力给了我“预计 getArtists 的间谍已被调用”的响应。

});

任何关于为什么这不起作用的想法将不胜感激。

0 投票
1 回答
10606 浏览

unit-testing - SpyOn 返回预期的间谍,但得到了函数

我正在测试一个调用服务(通过 goToPage 函数)的控制器,以便使用 spyOn 进行重定向。这很简单,但我得到“预期是间谍,但得到了功能”。错误。我究竟做错了什么?这是我的规格:

});

0 投票
1 回答
234 浏览

javascript - jasmine javascript spyon 对象实例

所以我有这个 JS 原型(类),我正在尝试为其构建 jasmine 测试,但似乎无法弄清楚如何让这些测试工作。

这是该课程的重要部分:

和我正在写的测试:

当我运行测试时,Expected spy display_date to have been called.尽管实际方法被调用,但我得到了。我知道只是我监视的不是Calendar我初始化的实例,但我不知道如何或为什么。

我很感激任何人都可以给我的帮助。

0 投票
1 回答
869 浏览

jasmine - 在(不同的)闭包中使用 Jasmine `spyOn` 函数

我们正在使用require和 Browserify,所以单功能模块是这样导入的:

并像这样使用:

我想要spyOn那个 loadJson 函数,但这似乎是不可能的。

它不是一个全局函数,所以这不起作用:

它不是本地函数,所以这不起作用:

当我require将模块添加到我的 Jasmine 规范中时,该函数在该闭包内可见,但这与实际实际使用的其他模块不同loadJson

简而言之,我认为在这种情况下不可能使用spyOn它——对吗?有什么创造性的解决方法吗?

0 投票
1 回答
104 浏览

angularjs - AngularJS 和 Jasmine 测试工厂

我是 angularjs 单元测试的新手。我有一家工厂,我正试图用茉莉花来监视,但我无法弄清楚测试规范的语法。下面是工厂:

这是我的测试规范,它在期望语句上失败(错误:预期的间谍 getAssets 已被调用):

0 投票
1 回答
269 浏览

javascript - Angular Jasmine SpyOn $resource 处理错误

我正在尝试对使用$resource. 为了保持隔离,我想使用 Jasmine 的 spyOn 和 spy on$resourcequery()方法。在我的控制器中,我希望能够使用将query()成功和错误函数直接传递给查询方法的简短形式,而无需调用$promise.then(success, error). 这是可能的,还是我坚持长形式query().$promise.then(success, error)

这是我用失败的测试创建的一个 plunker,说明了我的问题:http ://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview

我在 SO 上发现了几个声称可以解决问题的问题,但所有问题都在使用我正在使用的组件的旧版本。从 plunker 你可以看到我正在使用 Angular 1.5.2 和 Jasmine 2.4.1。

作为一个相关问题,许多教程表明,在您的控制器中,您可以将 的返回值分配query()给一个数组,并且随着数据的加载,该数组将被更新。这是最干净的解决方案,但如果发生错误怎么办?我希望如果加载数据时出现问题,您最终会收到一些默认错误通知,或者根本没有发生任何事情。通过拦截器在其他地方处理错误并可能触发事件并以某种通用的非控制器特定方式通知用户的最佳实践是什么?我认为拦截器需要某种方式来确定向用户显示什么消息以提供一些上下文,例如“加载百吉饼似乎需要比平时更长的时间,单击此处重试”而不是“某些请求返回 500状态码'

0 投票
1 回答
692 浏览

angularjs - Angular Jasmine spyOn $resource 意外请求

我正在对调用服务以获取 json 数据的 Angular 控制器进行单元测试。我正在使用 Jasmine spyOn 来监视我的服务的查询方法,如下所示:

我已经定义了一个在开发过程中在浏览器中运行的模拟后端,它拦截真正的 REST 调用,并用于$resource(path/to.json).query()返回假数据。每当我启用模拟后端时,浏览器测试都可以正常工作,但是当我这样做时,我的单元测试会因意外请求而失败scope.$digest()。当我监视该方法时,如何调用模拟后端?

我希望此配置与指定的模拟后端一起使用,这样我就可以在浏览器中更新应用程序之前查看文件并运行单元测试。

更新:

http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview

这是我创建的一个 plunker,它显示了我所看到的行为。为什么会调用 $httpBackend 的 whenGET 方法?

我已经看到其他示例,他们创建了一个仅包含要监视的空方法的模拟服务,但在这种情况下,如果您已经有一个假服务,那么 spyOn 的 callFake 有什么意义,只需将 callFake 逻辑放在假服务的方法,不要打扰间谍活动。