问题标签 [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 回答
625 浏览

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 构建在运行测试时一直不可靠,并且这两个标签的关系不是导致有效二等分的关系。

0 投票
2 回答
1457 浏览

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 中获得全局测试超时。

0 投票
1 回答
127 浏览

ember.js - Ember-cli 自定义测试体布局(content-for)

在最新版本的 ember-cli-qunit 中,test-body.html 模板看起来像这样......

有没有办法在不直接更改包中的源的情况下自定义它?这可能听起来有点挑剔,但在浏览器中运行测试时我更喜欢稍微不同的布局:)。

我似乎找不到太多关于覆盖此模板的文档。

0 投票
1 回答
4512 浏览

ember.js - 如何在使用 qunit 的 Ember 单元测试中依赖商店即服务?

根据版本的博客文章,商店现在可以用作服务:ember-data1.0.0-beta.16

但是,我不知道如何qunit对这样的组件进行单元测试。我尝试了以下方法:

和:

当我做前者时,我会得到一个错误Attempting to register an unknown factory: 'service:store',如果我做后者,那store就是undefined.

想法?

(我正在写一个ember-cli风格的应用程序)。

更新:

在 ember-test-helpers repo 中似乎有一个未解决的问题。

在等待此修复程序时,我制作了一个可以作为权宜之计的助手(coffeescript):

0 投票
1 回答
328 浏览

ember.js - Ember.js 动态路由在测试中没有解决,但在生产中工作

因此,我尝试使用 Twitter 样式的 URL 语法,允许用户example.com/quaunaut使用用户名“quaunaut”访问用户的用户页面。我能够通过以下方式做到这一点:

应用程序/路由器.js

应用程序/路由/用户/show.js

现在,当通过 直播或运行时ember s,这非常有效。但是,在测试中,似乎由于某种原因无法解决。

这导致以下测试结果:

那么,任何想法为什么currentPath()不解决?如果您也有任何建议以更好地实施我在这里要做的事情,我当然愿意接受。

0 投票
1 回答
379 浏览

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 时,问题就消失了。现在,如果我能弄清楚我们在该更新中的其他失败测试......

0 投票
1 回答
749 浏览

javascript - Ember CLI 生成的单元测试在它存在时失败

我在 controllers/order.js 中有一个订单控制器

这在 /tests/unit/controllers/order-test.js 中有一个测试

router.js 看起来像这样

我的想法是我有一个 /orders/ 路线,其中有人单击表格中的订单,然后在表格下方显示有关订单的更多详细信息,例如路线现在是 /orders/1。

单元测试失败:

我需要在设置或测试中进行哪些更改才能使单元测试在此处通过?

0 投票
1 回答
168 浏览

ember.js - this.subject() 在测试开始时返回已经销毁的对象

我的 ember 模型有几个 qunit 测试。

当我尝试保存我的模型时,它会引发

Assertion Failed: calling set on destroyed object

当我运行它时this.subject().get('isDestroyed'),它返回 true。

这里发生了什么?

0 投票
1 回答
352 浏览

ember.js - Ember 测试:为什么要使用 Assert.?

我看到了很多使用的示例(包括 ember-cli 生成的测试),assert.function()但我可以按原样使用该函数,所以我做错了什么,或者示例只是显示了不是真的必要的限定符?

例如,这些中的任何一个都可以在新生成的单元测试中工作:

assert.expect(1);

expect(1);

如果第二个有效,为什么还要做第一个?

0 投票
1 回答
300 浏览

unit-testing - 具有计算属性的简单 Ember 组件测试

我知道这应该很简单,我只是没有做正确的事情,还没有找到可以模仿的例子,我想我也不完全理解应该在Ember.run()

这是我的组件代码:

我的组件模板:

在我的测试中:

我有三个这样的测试,一个针对三种不同状态中的每一个。如果我只有一个测试,我不需要为了通过测试而将包裹component.set()起来。Ember.run()但是,如果我有所有三个测试,我会得到这个错误:

您已经打开了测试模式,它禁用了运行循环的自动运行。您将需要在运行中包装任何具有异步副作用的代码

但是,如果我确实将每个component.set()调用都放在运行循环中,那么我的测试会由于equal断言期望 1 并得到 0 而失败。我确信这是由于我缺乏理解,但要么set()不是正在运行,否则组件会在断言中重新呈现,因此不知道 status 属性已设置。我已经阅读了一个小时的文档和谷歌搜索,但还没有找到解决方案(更有利的是,一个解释)。