问题标签 [ember-qunit]

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 回答
514 浏览

ember.js - 如何将 qunit-bdd 与 ember-qunit 一起使用?

最初由 Andreas Haller 在邮件列表中发布,在此处重新发布,以便其他人可以使用“qunit-bdd”标签。

ember-qunit添加了一个方便的moduleFor助手,可以用来替代 QUnit 的module功能。现在 ember-qunit 抽象了一些东西,这样我就不必使用模块功能,而且我不知道我是否可以。我的问题是双重的:

  1. defacto 的行为是否describe与 相同module
  2. 我如何使用 ember-qunit 的moduleFor/ moduleForComponent

如果#2没有解决方案,但类似的东西describe(moduleFor('controller:posts'), function() { … })会很好。

0 投票
2 回答
1052 浏览

authentication - 在 Ember App Kit 中测试 ember-simple-auth

我正在尝试为我的 Ember 应用程序执行集成/验收测试。我正在专门测试用户身份验证(例如——提交登录表单)和需要经过身份验证的用户的受保护页面/状态。

关于我的应用程序的一般说明:

  • 使用Ember 应用套件
  • 使用ember-simple-auth进行身份验证
  • 我有api-stubs用于我的 ember-simple-auth 表单,可以使用 Devise 授权器进行访问。在浏览器中运行应用程序时,这些工作正常。

我有三个问题:

1. 设计身份验证器和临时存储

从 ember-simple-auth API 中,它指的是使用 Ephemeral 存储进行测试。我已经这样做了,很像这样。但是,会话似乎仍存储在本地存储中。如果我没有localStorage.clear()在每个测试设置/拆卸测试中执行失败,因为我在每个测试在第一个之后运行时保持登录状态。

当我为我的应用程序使用 Devise 身份验证器时,我是否能够防止在每次测试之间将会话存储在本地存储中?

2. 多重验收测试

如果我尝试登录超过 1的用户test(),我的测试将进入无限循环。第一个测试将通过,但是当第二个测试提交登录表单时,整个测试套件将停止并重新启动。

集成测试#1

集成测试#2

3. EAK api-stubs & Testem

EAK 的 api-stub似乎不适用于 Testem,因此当通过命令行/Testem 运行时,这些验收测试中的“登录”过程会失败。

我尝试设置 sinon.js,但上述问题使我无法确定它是否真正正常工作。使用 ember-simple-auth 成功存根登录用户的最佳方法是什么?是否可以将 EAK 的 api-stub 用于 Testem?

0 投票
1 回答
1127 浏览

javascript - 使用 ember-qunit 测试带有商店的控制器 (DS.FixtureAdapter)

我有一个控制器(使用)的 ember-qunit 测试用例moduleFor('controller:name', ...),我希望能够使用moduleForModel-exclusivethis.store()来检索 DS.FixtureAdapter 数据存储。对于这个特定的测试用例,我不是要测试模型——我只是想验证控制器是否可以填充一组模型实例,并且可以针对该数据运行各种操作。

我正在使用咖啡脚本,所以我的代码如下所示:

在上面的示例中,有一个名为 TestController 的控制器,还有一个名为 Test 的模型。我从ember-qunit的定义中取消了container.register和行。context.__setup_properties__.storemoduleForModel

问题是运行 ember-qunit 测试套件时出现错误:

在 ember-qunit 之外运行实际应用程序可以正常工作。也许那里有人遇到同样的问题?或者也许我采取了错误的方法?

0 投票
2 回答
1105 浏览

javascript - 测试使用具有单独模板的另一个组件的 ember 组件

我正在尝试测试使用另一个组件的 emberjs 组件。我将 ember-qunit 与 moduleForComponent 方法一起使用。在那里我定义我的组件需要另一个组件,需要:['component:my-kitten']。

但是似乎如果您使用带有单独模板的组件,则不会加载该组件的模板。

我更改了 emberjs 指南中的 jsbin 示例。

使用组件中定义的模板作为布局的工作示例

不工作的例子,我将布局移动到一个单独的模板

0 投票
0 回答
672 浏览

ember.js - 对调用异步关系的控制器操作进行单元测试

我有两个模型,ProgramProject。AProgram有很多Projects。

ArrayController负责显示程序中的所有项目。呈现的每个项目都有一个destroy链接(对 的一个简单操作ArrayController)。

由于关系是异步的,因此调用会program.get('projects')返回一个 Promise。

我使用 Firebase (和emberFire)作为​​我的后端,它存储关系,如

我正在使用ember-qunitsinon作为存根/模拟库。我第一次尝试对此进行测试确实大量使用了sinon.spy().

我正在创建新的 Ember 对象,因为在我的测试中没有明确的方法来实例化我的模型实例(至少我知道)。在动作中被调用的每个函数都使用 asinon.spy()所以我可以断言它们确实被调用了。

来自 Rails 背景,这似乎是针对四个相对简单的 CoffeeScript 行的大量测试代码,这让我相信我可能会以错误的方式处理这个问题。

无论哪种方式,我的总体问题是:

我如何测试(使用 sinon 或任何其他方式)removeObject()实际上是在program.projects异步回调函数中调用的?

另外,有没有一种更简单的方法可以让我在每次测试中不创建新的 Ember 对象的情况下对模型进行存根,这样我就可以像上面那样做出断言?

0 投票
1 回答
1880 浏览

javascript - 具有 hasMany 关系的模型上的 Ember.js 单元测试计算属性会产生 TypeError

使用这个:

并使用 Ember-qunit 进行测试。

所以我正在尝试为我的模型上的计算属性编写单元测试。计算属性取决于 hasMany 关系中的数据。

所以我的模型看起来像这样:

我的测试看起来像这样:

当我尝试 pushObject 时,出现此错误:

它引用的 ember-data 中的行是这样的:

现在我尝试了一些不同的事情,但仍然没有运气。

首先,我尝试一次创建它:

但这不起作用,因为它说:

所以我稍后尝试在 Ember.run 循环中设置角色:

这给出了相同的只读错误。

所以我尝试在设置角色的同时设置内容:

我得到了

所以现在我是我上面定义的代码:

并得到 TypeError。我不知所措。我不确定我做错了什么或者是否有错误。

比我聪明的人有建议吗?

这是一个 jsbin http://jsbin.com/bidus/1/

谢谢!

** 更新 1 **

查看kingpin2k在他的回答中所说的内容,我在我的应用程序中查看了我的 ember 源。我正在使用 ruby​​gem ember-source,所以我与@kingpin2k 使用的“调​​试”版本非常接近。ember-source 版本中有一些额外的功能,但所有的测试助手仍然存在。

所以我开始查看我的代码。弹出的错误与反向关系有关。

看着我的 jsbin,我没有补充说角色模型有一个belongsTo('user')

这是一个失败的 jsbin http://jsbin.com/bidus/2/使用 @kingpin2k 使用的相同 ember 源。由于角色模型上的 belongsTo 关系,它失败了。我意识到不应该在那里,因为我不需要需要了解用户的角色。因此,我删除了这种关系,现在一切都是绿色的。

现在我有一个传递的 jsbin http://jsbin.com/bidus/3/与@kingpin2k 所做的相同。

但它仍然引出了一个问题,即为什么 belongsTo 让它变得糟糕。据我所知,在那里应该没问题。也许@kingpin2k 你可以对此有所了解?我不应该为模型角色添加逆向,因为 ember 应该能够自己解决这个问题(我确实尝试添加它来踢球和咯咯笑,但代码仍然很糟糕)。我倾向于认为 ember-data 源中存在错误。

0 投票
1 回答
1804 浏览

javascript - 如何在控制器的 Ember.js 单元测试中设置模型数据

我正在尝试编写一个单元测试来测试我的控制器。我有一个计算属性,它在模型上使用计算属性。

我不确定如何设置测试以将数据加载到模型中。

在这里,我有我的模型:

在这里我有我的控制器:

在我的测试中,当我为控制器设置内容时,我这样做:

这显然不能正确加载它。因为当我调用那个学生方法时:

它返回所有用户。

这是一个 jsbin http://jsbin.com/zafod/1/

在 jsbin 中,当它过滤所有用户时,永远不会调用 isInstructor 计算属性,因为从未加载过模型数据(我假设)。当我拨打电话时,它会返回未定义。

那么如何将这些数据加载到模型中呢?

谢谢!

0 投票
1 回答
506 浏览

ember.js - 登录后的 Ember auth transition.retry() 在测试时不会传输

我在测试我的登录名和应用程序的相关功能时遇到了一些问题。该应用程序运行良好,但测试失败。对于测试,我使用Qunitwithkarma

我创建了一些经过身份验证的路由(比如帐户),只有在登录后才能访问。如果用户在没有登录的情况下转到帐户路由,他将被重定向到登录页面,并在成功登录后重定向回帐户页面。

我正在尝试使用

但此测试在登录后失败,并且不会重定向回帐户页面。有什么帮助吗??

0 投票
2 回答
408 浏览

unit-testing - Qunit 测试 ember 控制器,位于包含多个控制器的文件中?

所以,我一直在尝试对 Ember 控制器进行 qunit 测试,问题是,控制器位于一个包含多个控制器的咖啡脚本文件中。

现在,ember 测试指南说,为了测试控制器,我应该像这样使用“moduleFor”助手:

moduleFor(fullName [, description [, callbacks]])

在我的例子中,全名是:“CustomersIndexController”,但是因为它包含在“customers_controller.coffee”中,它本身包含多个控制器,所以测试它变得有问题。

在无尽的在线挖掘之后,我发现(如果我错了,请纠正我)解析器只关心文件名,而不关心'export default myModel'提供的名称

为了更清楚,这是我的“customers_controller.coffee”:

这是customers-controller-test.coffee文件:

我已经尝试了我的大脑可以产生的所有想法......没有任何运气(将控制器名称从 camelCase 更改为 dasherized,更改为绝对路径,甚至尝试导入 customers_controller.coffee),但我不断得到:

任何帮助/建议/链接都非常感谢。

0 投票
2 回答
1779 浏览

javascript - 如何测试具有关系依赖关系的 Ember 模型的计算属性?

我正在编写 Qunit 测试来测试一个 Ember 模型,但是很难测试具有关系依赖关系的计算属性(计算属性触发另一个模型的计算属性)。

正在测试的模型(CoffeeScript):

会议模式:

现在,测试customerPhones,并且firstCustomerFullName给我带来了真正的困难......

我的测试如下所示:

现在,我在这个测试中使用了一些技术,我在 Stack Overflow 上的一个答案中找到了这些技术,但我现在似乎找不到它。

几天前效果很好,现在(我知道这似乎是胡说八道)每当我运行测试时,它都会出错:

断言失败:您不能将“会议”记录添加到此关系(仅允许“会议”)

我不知道错误在哪里,也不知道如何解决。整天胡思乱想,没有结果。

我该如何解决这个问题?