问题标签 [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 投票
2 回答
65 浏览

javascript - 单元测试中的冻结承诺

在尝试测试返回普通 $q 承诺的服务时,我遇到了一件奇怪的事情。我在任何测试中尝试的任何承诺实际上都不会被解决/拒绝(更具体地说,then不会调用来自的处理程序,承诺中的代码运行得很好)。我什至尝试在根范围内强制进行摘要,正如 SO 上的其他一些答案所建议的那样,没有任何运气。

这是一个独立的小例子:

我必须做什么才能使承诺按预期工作?

0 投票
1 回答
478 浏览

javascript - 使用 Jasmine、Karma 和 ng-Mock 在 Angular 中提供单元测试服务

我无法在单元测试中访问我的服务和过滤器(我还没有尝试过指令)。我以前写过单元测试,但是当我开始配置我们的构建时,我无法访问我们的新服务来编写单元测试。我不断得到TypeError: null is not an object (evaluating 'currentSpec.$modules') in...。我做了一些阅读,看起来它可能与我正在使用的节点包有关。我想知道更大的社区是否可以确保这些配置看起来正确。我已经缩写了下面的文件。

使用当前配置,这是错误的。

包.json

业力.conf.js

服务规范.js

正在以正确的顺序加载服务和规范。该服务没有依赖关系。我假设当我需要注入服务依赖项时我会遇到同样的错误,但如果我能弄清楚注入,我可以根据需要注入正确的服务。

提前感谢您抽出时间查看此问题并可能回答问题。

-W

0 投票
1 回答
498 浏览

javascript - Angularjs ngMock 在每个测试之前或每个测试用例上注入?

设想

我目前正在为一个 Angular 项目编写测试,几乎在我找到的每一篇文章中,我都看到他们在一个块中创建“全局”变量describe,它们存储要在测试中使用的依赖项,如下所示:

我发现这是非常干燥的,因为它创建并共享了服务/工厂/等的新实例。供测试使用。但是在编写大量测试时,我注意到我创建了全局变量然后不再使用它们,并且忘记在inject()留下这些痕迹时删除它们,这可能会导致混乱。

我的困惑

因此,我一直在为每个测试用例注入依赖项,然后将小块重构describe为不会失控的全局变量,如下所示:

这还有一个额外的好处,那就是保持本地化,而不必使用必须搜索它们来自哪里的变量,恕我直言。

问题

beforeEach每个测试而不是在块内注入依赖项有什么问题吗?

0 投票
3 回答
1561 浏览

angularjs - 在量角器中刷新 $timeout

我正在使用量角器编写测试,它总是等待$timeout完成。

如果我使用ignoreSynchronization = true; 它停止等待并且测试提前运行。但是对于我的测试,我应该回退ignoreSynchronization = false; . 当我将其设置为 false 时,量角器停止并开始等待之前的$timeout完成。

我将$timeout用于通知窗口并使用此窗口显示验证错误。目前我正在测试验证,它使测试非常慢。

所以ingnoreSynchronization = true的解决方案对我来说不兼容。

我试过$timeout.flush()但它会导致错误$timeout.flush is not a function

我尝试使用ngMock,但不确定是否可以将其与量角器一起使用。

有人解决这个问题吗?

0 投票
1 回答
46 浏览

javascript - 无法从模拟 $httpBackend 服务中获得正确的结果

我有一个功能:

我这样称呼它:

从AngularcreateClub()控制器调用的位置。我还没有编写控制器,因为我坚持测试。我正在使用 ngMocks $httpBackend 来伪造响应,如下所示:

console.log(existingClub)永远undefined console.log(validationResult)是永远{result: true}

我究竟做错了什么?我期待前者是{_id:'1', clubName: 'ClubFoo', owner: 'foo@bar.com'},后者是{result: false, reason: 'Club already exists. Choose another Club Name'}

0 投票
1 回答
1602 浏览

angularjs - 测试时如何访问组件控制器?

我正在尝试对组件进行一些测试。我有以下

控制器item-selector有一个activate()方法。如何从我的测试中调用它?$scope似乎没有任何参考。

0 投票
1 回答
1042 浏览

javascript - 使用 httpbackend 测试 ngResource - 可能是未处理的拒绝错误

问题

我正在尝试使用 Karma、Mocha、Chai、PhantomJS 测试以下控制器

IndexCtrl.js(简化版)

index.controller.test.js(再次简化,我还有其他非http测试)

当我运行测试时,我收到以下错误。如果我注释掉 flush 行,它不会抛出这个错误,但它不能正常工作。

包.json

模组说明

这与Angular 1.6.0 不同:“可能未处理的拒绝”错误,该错误不是由刷新触发的,并且解决方案正在回滚到 angularjs 1.5.9。我已经尝试回滚到 angular 1.5.9,但无济于事。所以,看在上帝的份上,如果我得到另一个“标记为重复”的盲人......

0 投票
1 回答
269 浏览

javascript - AngularJS 模块 NgMockE2E 的 passThrough() 方法不起作用

我在angular-js中有一个sailsnode-js应用程序,我决定对它进行一些测试,特别是在后端部分,为此我使用JasminengMockE2E工具,因为我想用一些真实的服务器端测试它数据。

这是我要测试的代码的一部分:

这是我的service.js文件,我在其中提供了 ajax 服务:

这是我加载JasminengMocks和测试文件的 html:

这是上面引用的testBackend.js文件,我打算在其中进行测试:

问题是在运行testBackend.js测试文件时,它没有进行任何http 调用。似乎passThrough()函数没有正确完成他的工作。

我遇到并纠正了没有定义passThrough()函数的问题,这是因为我没有加载ngMockE2E模块(而不是ngMock)。但是这次Jasmine工作正常,错误只是规范是错误的:

抱歉,如果此问题已经解决,我无法在任何地方找到解决方案。

0 投票
0 回答
22 浏览

javascript - Angular ngMock 有时会因无待处理请求而失败

如果我将呼叫保持在$httpBackend.flush()原处,则测试将失败No Pending Requests,但预期会通过。如果我注释掉flush电话,期望会失败。当我在获取日期的服务中放置一个断点时,它被调用并且承诺正在解决,我可以进入addIssues它被调用。会不会是另一个导致它的测试?

我确实有TEST.$httpBackend.expectGET("/some/url").respond(200,part)一个beforeEach。flush(在 beforeEach 中没有调用)

0 投票
0 回答
1147 浏览

angularjs - Ng-mock:$compileProvider 没有方法“preAssignBindingsEnabled”

我一直在将 Angular 1.5.8 中的指令重写为组件。我想用 '$componentController` 编写单元测试,就像这里描述的那样:https ://docs.angularjs.org/guide/component 。

问题是我在这一行遇到错误:

var ctrl = $componentController('componentName', null, bindings);

说: undefined is not a constructor (evaluating 'compileProvider.preAssignBindingsEnabled()') app/lib/angular-mocks/angular-mocks.js:2235:80

所以看起来 $compileProvider 根本没有preAssignBindingsEnabled方法。如果有人知道我可能做错了什么,我将不胜感激。

谢谢!

更新:单元测试的 jsFiddle:https ://jsfiddle.net/kveb1ovo/2/