我正试图抓住一个Heisenbug。
我正在将我们的项目从Ember CLI 0.2.0和Ember 1.10.0更新为Ember CLI0.2.3和Ember 1.11.1。这是一个非常轻松的过程,但我只有一个测试现在只在Safari(7.1.5)中失败。它在PhantomJS、Chrome和Firefox中传递。
令人烦恼的是,只有当测试运行由Testem启动时(即,当代码中的更改触发自动更新测试运行时),测试才会失败。如果我从Quit网络界面内部启动测试,它就会通过。无论测试分组如何,这两件事都是正确的。在浏览器中手动运行时,正在测试的功能运行良好。
这是一个集成测试,用于验证当输入中的值发生更改时,输入是否会使用服务器返回的值进行更新。在测试中,"服务器"是一个Prender实例。以下是测试本身的样子:
test('Editing allocation cell', function() {
visit('/district/periods');
fillIn(SELECTORS.definitionRowInput(1,0), '100');
triggerEvent(SELECTORS.definitionRowInput(1,0), 'focusout');
// The triggerEvent should be tripping the focusOut event on a particular
// Ember.Textfield subclass, which subsequently leads to a POST request to
// the server. On Safari, however, the focusOut event isn't being called here.
// It is called elsewhere in the app, and it works in production.
// Things that also don't work: keyEvent(element, 'keypress', 16) (a tab),
// sending 'blur', sending 'focus-out'.
// 'focus-out' also fails in Firefox, 'blur' and tab fail in all 4 envs
andThen(function() {
equal($(SELECTORS.definitionRowInput(1,0)).val(), '90', 'The updated input takes the return value from the server (even if it is different from input)');
equal($(SELECTORS.gradeTotal(2)).text(), '120', 'Grade total updates with the new sum');
});
});
注意第二个andThen()
块:通过将focusout
发送到控件,我们应该提示支持组件中的代码将数据更新回服务器。其他浏览器会这样做——我在Prender响应程序中放了一个console.log()
来验证它——但Safari没有。我猜它对focusout
事件的响应不正确。
考虑到此测试在一个分支中通过,该分支的不同之处仅在于Ember CLI更新。。。可能发生了什么变化来实现这一突破?
ETA:我已经单独回滚了这次更新中更新的所有库,测试仍然失败。唯一可行的改变似乎是将Ember本身回滚。它以与1.11.1相同的方式进入1.11.0,因此变化在1.10.0和1.11.0之间。(这只剩下我大约600个承诺要筛选…)
ETA2:我已经将范围缩小到1.11.0到1.11.0之间。我试图使用bower链接来使用ember的本地构建,但到目前为止,ember构建在运行测试时一直不可靠,而且这两个标签的关系并不能导致有效的平分。
我无法帮助您实际运行测试,但平坦化历史并没有那么困难。你提到的标签之间有49个补丁。git cherry-pick
命令流给出了我上传到的分支https://github.com/rdebath/test/tree/ember.js
该分支上的每一个提交(在v1.110-beta.5标记之后)都来自您提到的标记之间的"漂亮"路由。提交哈希都不同(显然),但最终的树哈希与v1.11.0相同,因此这应该是git平分的好路径。
构建问题也是可以避免的,例如,我建议使用平分线来找到导致这些问题的补丁,并尽可能晚地找到该补丁的git rebase -i
。这应该会把问题放在它的解决方案旁边;但"压缩"这些提交可能不是一个好主意,因为您希望能够将所有内容关联回真实的树。
为了帮助选择提交列表,我使用了以下命令:
git log --graph --decorate --oneline --date-order --all
有了这一点,"美好"的道路就相当明显了。