问题标签 [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 - Ember 升级打破了一项测试,仅在 Safari 中
我正试图抓住一个Heisenbug。
我正在将我们的项目从 Ember CLI 0.2.0 和 Ember 1.10.0 更新到 Ember CLI 0.2.3 和 Ember 1.11.1。这是一个非常轻松的过程,但我只有一个测试现在仅在 Safari (7.1.5) 中失败。它通过 PhantomJS、Chrome 和 Firefox。
令人讨厌的是,只有在 Testem 启动测试运行时(即代码更改触发自动更新测试运行),测试才会失败。如果我从 Qunit Web 界面内部启动测试,它就会通过。无论测试分组如何,这两件事都是正确的。在浏览器中手动运行时,正在测试的功能工作得很好。
这是一个集成测试,验证当输入中的值发生更改时,输入会使用从服务器返回的值进行更新。在测试中,“服务器”是一个 Pretender 实例。这是测试本身的样子:
注意第二个andThen()
块:通过发送focusout
到控件,我们应该提示支持组件中的代码将数据更新回服务器。其他浏览器会这样做——我console.log()
在 Pretender 响应器中放了一个来验证它——但 Safari 没有。我猜它没有正确响应focusout
事件。
考虑到这个测试通过了一个只因 Ember CLI 更新而不同的分支......为了打破这个问题,可能会发生什么变化?
ETA:我已经单独回滚了此更新中更新的所有库,并且测试继续失败。唯一似乎有效的更改是回滚 Ember 本身。它以与 1.11.1 相同的方式在 1.11.0 中中断,因此更改在 1.10.0 和 1.11.0 之间。(这只让我大约 600 次提交筛选...)
ETA2:我已将范围缩小到 1.11.0-beta.5 和 1.11.0 之间。我正在尝试使用bower 链接来使用 ember 的本地构建,但到目前为止,ember 构建在运行测试时一直不可靠,并且这两个标签的关系不是导致有效二等分的关系。
ember-cli - 在 Ember-cli 中为 Qunit 设置全局超时
我找不到任何记录 ember-cli 为 QUnit 设置全局超时的地方。
我找到了 QUnit 的文档: https ://api.qunitjs.com/QUnit.config/
testTimeout(默认值:未定义) 类型:Number 以毫秒为单位指定全局超时,在此之后所有测试都将失败并显示适当的消息。当异步测试未完成时很有用,以防止测试运行程序卡住。设置为较高的值,例如 30000(30 秒)以避免缓慢的测试意外超时。
我能够在 \node_modules\ember-cli-qunit\vendor\ember-cli-qunit\qunit-configuration.js 内部进行更改,并且可以按预期工作。
但是,我们没有将 node_modules 签入到源代码管理中,因此在这里更改此值对我没有任何好处。
我不知道应该在哪里进行更改以在 ember-cli 中获得全局测试超时。
ember.js - Ember-cli 自定义测试体布局(content-for)
在最新版本的 ember-cli-qunit 中,test-body.html 模板看起来像这样......
有没有办法在不直接更改包中的源的情况下自定义它?这可能听起来有点挑剔,但在浏览器中运行测试时我更喜欢稍微不同的布局:)。
我似乎找不到太多关于覆盖此模板的文档。
ember.js - 如何在使用 qunit 的 Ember 单元测试中依赖商店即服务?
根据版本的博客文章,商店现在可以用作服务:ember-data
1.0.0-beta.16
但是,我不知道如何qunit
对这样的组件进行单元测试。我尝试了以下方法:
和:
当我做前者时,我会得到一个错误Attempting to register an unknown factory: 'service:store'
,如果我做后者,那store
就是undefined
.
想法?
(我正在写一个ember-cli
风格的应用程序)。
更新:
在 ember-test-helpers repo 中似乎有一个未解决的问题。
在等待此修复程序时,我制作了一个可以作为权宜之计的助手(coffeescript):
ember.js - Ember.js 动态路由在测试中没有解决,但在生产中工作
因此,我尝试使用 Twitter 样式的 URL 语法,允许用户example.com/quaunaut
使用用户名“quaunaut”访问用户的用户页面。我能够通过以下方式做到这一点:
应用程序/路由器.js
应用程序/路由/用户/show.js
现在,当通过 直播或运行时ember s
,这非常有效。但是,在测试中,似乎由于某种原因无法解决。
这导致以下测试结果:
那么,任何想法为什么currentPath()
不解决?如果您也有任何建议以更好地实施我在这里要做的事情,我当然愿意接受。
ember.js - 一个通过 Ember 集成测试打破了下一个:坏的拆解块?
我有这两个 Ember 集成测试,A 和 B。(我还有很多,但在调试时,我已经删除了所有其他测试以隔离问题。与 A 相同的文件中有 9 个测试,我评论了其他 8.) 如果 A 在 B 之前运行,B 将失败。如果 B 自己运行,或者在 A 之前运行,它将通过。
从这个描述中可以清楚地看出,A 正在对 B 搞砸的测试环境做一些事情。然而,在对测试和与日志消息有关的生产代码进行大量加盐之后,我并没有更接近于弄清楚发生了什么,而且我如果有明显的问题,我希望其他人能发现。
现在我正在仔细afterEach
研究这两个测试中的块。以下是测试 A的beforeEach
和块的概要:afterEach
这afterEach
几乎是库存的 ember-cli 代码,但它让我有点困惑。上的文档Ember.run()
建议它应该获得一个函数作为参数,但我们在这里没有给出它,所以我不确定它是如何工作的。而且,Pretendershutdown()
调用应该在 Ember.run 中(还是在它自己的 Ember.run 中)?
版本记录:ember-cli 0.2.0、Ember 1.10.1。
ETA:当我更新到 ember-cli 0.2.3 和 Ember 1.11.3 时,问题就消失了。现在,如果我能弄清楚我们在该更新中的其他失败测试......
javascript - Ember CLI 生成的单元测试在它存在时失败
我在 controllers/order.js 中有一个订单控制器
这在 /tests/unit/controllers/order-test.js 中有一个测试
router.js 看起来像这样
我的想法是我有一个 /orders/ 路线,其中有人单击表格中的订单,然后在表格下方显示有关订单的更多详细信息,例如路线现在是 /orders/1。
单元测试失败:
我需要在设置或测试中进行哪些更改才能使单元测试在此处通过?
ember.js - this.subject() 在测试开始时返回已经销毁的对象
我的 ember 模型有几个 qunit 测试。
当我尝试保存我的模型时,它会引发
Assertion Failed: calling set on destroyed object
当我运行它时this.subject().get('isDestroyed')
,它返回 true。
这里发生了什么?
ember.js - Ember 测试:为什么要使用 Assert.?
我看到了很多使用的示例(包括 ember-cli 生成的测试),assert.function()
但我可以按原样使用该函数,所以我做错了什么,或者示例只是显示了不是真的必要的限定符?
例如,这些中的任何一个都可以在新生成的单元测试中工作:
assert.expect(1);
expect(1);
如果第二个有效,为什么还要做第一个?
unit-testing - 具有计算属性的简单 Ember 组件测试
我知道这应该很简单,我只是没有做正确的事情,还没有找到可以模仿的例子,我想我也不完全理解应该在Ember.run()
这是我的组件代码:
我的组件模板:
在我的测试中:
我有三个这样的测试,一个针对三种不同状态中的每一个。如果我只有一个测试,我不需要为了通过测试而将包裹component.set()
起来。Ember.run()
但是,如果我有所有三个测试,我会得到这个错误:
您已经打开了测试模式,它禁用了运行循环的自动运行。您将需要在运行中包装任何具有异步副作用的代码
但是,如果我确实将每个component.set()
调用都放在运行循环中,那么我的测试会由于equal
断言期望 1 并得到 0 而失败。我确信这是由于我缺乏理解,但要么set()
不是正在运行,否则组件会在断言中重新呈现,因此不知道 status 属性已设置。我已经阅读了一个小时的文档和谷歌搜索,但还没有找到解决方案(更有利的是,一个解释)。