问题标签 [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.
ember.js - 如何将 qunit-bdd 与 ember-qunit 一起使用?
最初由 Andreas Haller 在邮件列表中发布,在此处重新发布,以便其他人可以使用“qunit-bdd”标签。
ember-qunit添加了一个方便的
moduleFor
助手,可以用来替代 QUnit 的module
功能。现在 ember-qunit 抽象了一些东西,这样我就不必使用模块功能,而且我不知道我是否可以。我的问题是双重的:
- defacto 的行为是否
describe
与 相同module
?- 我如何使用 ember-qunit 的
moduleFor
/moduleForComponent
?如果#2没有解决方案,但类似的东西
describe(moduleFor('controller:posts'), function() { … })
会很好。
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?
javascript - 使用 ember-qunit 测试带有商店的控制器 (DS.FixtureAdapter)
我有一个控制器(使用)的 ember-qunit 测试用例moduleFor('controller:name', ...)
,我希望能够使用moduleForModel
-exclusivethis.store()
来检索 DS.FixtureAdapter 数据存储。对于这个特定的测试用例,我不是要测试模型——我只是想验证控制器是否可以填充一组模型实例,并且可以针对该数据运行各种操作。
我正在使用咖啡脚本,所以我的代码如下所示:
在上面的示例中,有一个名为 TestController 的控制器,还有一个名为 Test 的模型。我从ember-qunit的定义中取消了container.register
和行。context.__setup_properties__.store
moduleForModel
问题是运行 ember-qunit 测试套件时出现错误:
在 ember-qunit 之外运行实际应用程序可以正常工作。也许那里有人遇到同样的问题?或者也许我采取了错误的方法?
ember.js - 对调用异步关系的控制器操作进行单元测试
我有两个模型,Program
和Project
。AProgram
有很多Project
s。
我ArrayController
负责显示程序中的所有项目。呈现的每个项目都有一个destroy
链接(对 的一个简单操作ArrayController
)。
由于关系是异步的,因此调用会program.get('projects')
返回一个 Promise。
我使用 Firebase (和emberFire
)作为我的后端,它存储关系,如
我正在使用ember-qunit
和sinon
作为存根/模拟库。我第一次尝试对此进行测试确实大量使用了sinon.spy()
.
我正在创建新的 Ember 对象,因为在我的测试中没有明确的方法来实例化我的模型实例(至少我知道)。在动作中被调用的每个函数都使用 asinon.spy()
所以我可以断言它们确实被调用了。
来自 Rails 背景,这似乎是针对四个相对简单的 CoffeeScript 行的大量测试代码,这让我相信我可能会以错误的方式处理这个问题。
无论哪种方式,我的总体问题是:
我如何测试(使用 sinon 或任何其他方式)removeObject()
实际上是在program.projects
异步回调函数中调用的?
另外,有没有一种更简单的方法可以让我在每次测试中不创建新的 Ember 对象的情况下对模型进行存根,这样我就可以像上面那样做出断言?
javascript - 具有 hasMany 关系的模型上的 Ember.js 单元测试计算属性会产生 TypeError
使用这个:
并使用 Ember-qunit 进行测试。
所以我正在尝试为我的模型上的计算属性编写单元测试。计算属性取决于 hasMany 关系中的数据。
所以我的模型看起来像这样:
我的测试看起来像这样:
当我尝试 pushObject 时,出现此错误:
它引用的 ember-data 中的行是这样的:
现在我尝试了一些不同的事情,但仍然没有运气。
首先,我尝试一次创建它:
但这不起作用,因为它说:
所以我稍后尝试在 Ember.run 循环中设置角色:
这给出了相同的只读错误。
所以我尝试在设置角色的同时设置内容:
我得到了
所以现在我是我上面定义的代码:
并得到 TypeError。我不知所措。我不确定我做错了什么或者是否有错误。
比我聪明的人有建议吗?
这是一个 jsbin http://jsbin.com/bidus/1/
谢谢!
** 更新 1 **
查看kingpin2k在他的回答中所说的内容,我在我的应用程序中查看了我的 ember 源。我正在使用 rubygem 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 源中存在错误。
javascript - 如何在控制器的 Ember.js 单元测试中设置模型数据
我正在尝试编写一个单元测试来测试我的控制器。我有一个计算属性,它在模型上使用计算属性。
我不确定如何设置测试以将数据加载到模型中。
在这里,我有我的模型:
在这里我有我的控制器:
在我的测试中,当我为控制器设置内容时,我这样做:
这显然不能正确加载它。因为当我调用那个学生方法时:
它返回所有用户。
这是一个 jsbin http://jsbin.com/zafod/1/
在 jsbin 中,当它过滤所有用户时,永远不会调用 isInstructor 计算属性,因为从未加载过模型数据(我假设)。当我拨打电话时,它会返回未定义。
那么如何将这些数据加载到模型中呢?
谢谢!
ember.js - 登录后的 Ember auth transition.retry() 在测试时不会传输
我在测试我的登录名和应用程序的相关功能时遇到了一些问题。该应用程序运行良好,但测试失败。对于测试,我使用Qunit
withkarma
我创建了一些经过身份验证的路由(比如帐户),只有在登录后才能访问。如果用户在没有登录的情况下转到帐户路由,他将被重定向到登录页面,并在成功登录后重定向回帐户页面。
我正在尝试使用
但此测试在登录后失败,并且不会重定向回帐户页面。有什么帮助吗??
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),但我不断得到:
任何帮助/建议/链接都非常感谢。
javascript - 如何测试具有关系依赖关系的 Ember 模型的计算属性?
我正在编写 Qunit 测试来测试一个 Ember 模型,但是很难测试具有关系依赖关系的计算属性(计算属性触发另一个模型的计算属性)。
正在测试的模型(CoffeeScript):
会议模式:
现在,测试customerPhones
,并且firstCustomerFullName
给我带来了真正的困难......
我的测试如下所示:
现在,我在这个测试中使用了一些技术,我在 Stack Overflow 上的一个答案中找到了这些技术,但我现在似乎找不到它。
几天前效果很好,现在(我知道这似乎是胡说八道)每当我运行测试时,它都会出错:
断言失败:您不能将“会议”记录添加到此关系(仅允许“会议”)
我不知道错误在哪里,也不知道如何解决。整天胡思乱想,没有结果。
我该如何解决这个问题?