问题标签 [ngmock]

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 投票
0 回答
44 浏览

javascript - 无法让 ngMock 正确地将服务注入 jasmine 测试

我正在尝试为我的控制器编写单元测试。我尝试了以下设置,但都没有奏效:

设置#1:

设置#2:

请记住,我要做的就是 log $controller。两种设置都会引发此错误(根本没有信息):

值得注意的是,它module 'PostApp'返回一个未定义的对象。但是,这是我的应用程序的名称,并且在测试之前正在加载文件。我究竟做错了什么??

0 投票
1 回答
5281 浏览

angularjs - $httpBackend .whenGet 不是 Angular 中的函数

我正在尝试创建一个虚拟服务来获取 Angular 中的数据,我正在使用 ngMockE2E,我的 Mock 代码如下所示:

我已经定义了我的控制器,在其中,它有以下代码:

对于发送 REST 请求的服务,我有以下代码:

我仍然收到此错误:Uncaught TypeError: $httpBackend.whenGet is not a function。

任何帮助表示赞赏,或需要任何澄清,请告诉我。

0 投票
0 回答
75 浏览

javascript - 带有 ngMock 和 Jasmine 的 Angular JS 导致 Promise 问题

我是 Jasmine JS 和 ngMock 的新手。

当我试图在角度和访问$location服务中注入 ngMock 以注入控制器以进行测试时。

我没有得到承诺的回应。请帮我。

我得到以下错误

错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。

0 投票
0 回答
274 浏览

javascript - 将函数作为参数传递给 addMockModule

我有一个奇怪的问题,我将一个函数传递给 addMockModule 参数,它以以下形式作为字符串返回:

变量等静态引用工作正常。这是代码:

0 投票
0 回答
48 浏览

angularjs - 量角器测试期间的 $timeout.flush

我的网站有一个应用程序范围的会话超时,该超时在页面加载后立即设置。在量角器中进行测试时,我想调用ngMocks来终止$timeout.flush()超时,但我还没有弄清楚如何从Protractor中获取ngMock$timeout模块中的服务句柄。

这可能吗?有没有其他人尝试过这种方法来规避量角器中的超时问题?

0 投票
3 回答
823 浏览

angularjs - $httpBackend.flush() 方法抛出错误:[$rootScope:infdig] 达到 10 个 $digest() 迭代。中止

我正在尝试使用 Karma 和 Jasmine 对我的 AngularJS 应用程序进行单元测试。我想模拟$http服务。为此,我使用了 $httpBackend 方法。以下是我要测试的服务:

我对此服务的单元测试是:

这是一个紧急问题,我需要尽快得到帮助。我将非常感谢您的回答。

0 投票
1 回答
294 浏览

javascript - ngMock 在预期请求时抱怨意外请求

我的 ng 应用程序运行良好,但我正在尝试为我的控制器编写一个 ngMock 测试;我基本上遵循 Angular 网站上的示例:https : //docs.angularjs.org/api/ngMock/service/ $httpBackend

我遇到的问题是即使在预期请求时它也会抱怨意外请求。

PhantomJS 1.9.8 (Windows 8 0.0.0) NotificationsController 应该获取通知列表失败

错误:意外请求:GET 对测试 API/AspNetController/AspNetAction 无效预期 GET api/AspNetController/AspNetAction

我没有得到的是,在错误行上,为什么在我的服务 URL 之前附加了一个“测试”字样?我认为它应该发送到 'api/AspNetController/AspNetAction' 我在这里做错了什么。我找不到任何其他人通过谷歌遇到与我相同的问题。

编辑:我注意到,如果我从控制器中删除 sendRequest 部分,并让单元测试在控制台中记录我的请求对象,我会看到以下 json。

这是控制器代码

测试代码

数据服务代码

回答:

由于 dataService 通过someInjectedConstant .baseUrl + 从控制器传入的whatever_relative_url 创建了最终的webapi url,在我正在编写的测试中,我将不得不注入someInjectedConstant

$httpBackend.expectGET(someInjectedConstant.baseUrl + relativeUrl)

而不是仅仅做一个 $httpBackend.expectGET(relativeUrl)

0 投票
2 回答
1127 浏览

angularjs - 如何使用 ngMock 注入 $controller

我正在尝试使用 Karma、Jasmine 和 ngMock 学习 Angular 的单元测试。Angular 文档中至少有两个地方展示了如何为控制器编写单元测试,我只是对他们如何做事有几个问题。

控制器文档中,关于测试控制器的部分

问题 1:这对我来说很有意义,但我不太明白。我知道这$controller是抓取“MyController”的一个实例,但看起来返回的内容没有被保存或在任何地方使用,所以我唯一能想到的是我们抓取该控制器以获得正确的$scope对象?即使这样,它似乎也没有被保存在任何地方的变量中,所以我仍然对它在幕后的工作方式有点困惑。我对如何module()工作也有同样的困惑,因为我们似乎在声明我们正在使用哪个模块,但没有在其他任何地方保存或使用它。幕后是否有缓存模块/控制器/范围的东西,所以我们不必手动保存它或其他东西?


这是单元测试文档中的另一个示例:

问题 2:beforeEach函数中,它正在做下划线包装的事情。这是否只是为了让您可以在整个过程中保持相同的服务名称而无需更改它?

问题 3:it()然后$controller用来做它的事情,这一次保存返回的东西, var controller 但似乎仍然从未使用过它。那么为什么要将它保存到变量中呢?我唯一能想到的就是你保存它以防你需要在这个it()块内再次使用它,但他们只是在这个例子中没有?


我一直在寻找一个好的解释,但我似乎找不到。抱歉,如果我错过了一个愚蠢的解释,但我时间紧迫,不能再花时间旋转我的轮子了。

0 投票
1 回答
572 浏览

angularjs - ngMock 将 $scope local 注入控制器

这是我提出的另一个问题的延续,该问题已成功回答。

我正在学习如何使用 Karma、Jasmine 和 ngMock 对 AngularJS 应用程序进行单元测试。这是我有疑问的代码:

问题1:为什么我们要新建一个scope并包含在locals注入区这一行:$controller('MyController', {$scope: scope});?它似乎工作得很好(例如,scope现在代表$scope来自该控制器的对象并具有它应该具有的所有属性和功能),但代码似乎暗示我们正在$scope用我们新创建的(并且为空的)重置控制器) scope(从行scope = $rootScope.$new();)。所以我想我只是没有完全理解那些当地人的目的/内部运作。

问题 2:从我的搜索中我也看到 newscope以两种常见的方式创建,或者上面显示的方式$rootScope.$new(),或者简单地声明scope = {}。甚至 Angular 文档都以两种方式进行,如此(使用) 和此处(使用 ) 所见。为什么这是一种方式而不是另一种方式?有区别吗?$rootScope.$new()$scope = {}

0 投票
0 回答
40 浏览

javascript - Angular 承诺在所有后续单元测试中都无法解决(ngMock)

我们最近升级到 Angular 1.5-rc0。最近对 ngMocks 的一项更改破坏了$rootScope每次测试之后的操作。但是,我很难弄清楚为什么我们在应用程序中使用的承诺在第一次之后就不会触发。

这是一个模拟右键单击事件以测试上下文菜单指令的测试。该指令使用另一个实用程序来加载 HTML 模板、缓存它等。该服务在加载模板时解析承诺。

然而,在 Angular/ngMock 1.5 中,promise 只解析第一个“it”块。$rootScope应该重新创建每个测试,所以我不明白是什么阻碍了它。

我尝试手动调用$rootScope.$apply()以强制解决承诺,但这在这里没有帮助。

这是我们的模板帮助器中解决承诺的重要部分:

我已经验证了它deferred.resolve的调用,但then听众从来没有这样做过。