繁体   English   中英

js-test-driver测试中的Ext.Msg错误

[英]Error with Ext.Msg in js-test-driver tests

在我的js-test-driver测试中,我简单地调用了一个错误

Ext.Msg.alert('Error', 'An error occurred while trying load parameters for action with id ' + actionId); 

错误消息:未捕获的TypeError:无法读取null的属性'insertBefore'

请注意,如果我在错误之前停止执行,则Ext.Msg.renderedtrue ,而Ext.Msg.el.dom.parentNode为null。

如果发生以下情况,则不会发生此错误:

  • 真正的应用程序仅在测试期间运行。
  • 如果我运行一个测试,则仅当我运行最终调用Ext.Msg.alert多个测试时

堆栈跟踪

Ext.define.insertBefore (ext-all-debug.js:13281)
Ext.define.show (ext-all-debug.js:42064)
Ext.define.sync (ext-all-debug.js:82755)
Ext.define.syncShadow (ext-all-debug.js:33992)
Ext.define.onAfterFloatLayout (ext-all-debug.js:34002)
Ext.define.afterComponentLayout (ext-all-debug.js:34374)
Base.implement.callParent (ext-all-debug.js:4455)
Ext.define.afterComponentLayout (ext-all-debug.js:38639)
Ext.define.notifyOwner (ext-all-debug.js:38067)
Ext.define.callLayout (ext-all-debug.js:125114)
Ext.define.flushLayouts (ext-all-debug.js:125283)
Ext.define.runComplete (ext-all-debug.js:125769)
callOverrideParent (ext-all-debug.js:36)
Base.implement.callParent (ext-all-debug.js:4455)
Ext.override.runComplete (ext-all-debug.js:29905)
Ext.define.run (ext-all-debug.js:125750)
Ext.define.statics.flushLayouts (ext-all-debug.js:29913)
Ext.define.statics.updateLayout (ext-all-debug.js:29947)
Ext.define.updateLayout (ext-all-debug.js:31844)
Ext.define.onContentChange (ext-all-debug.js:36116)
Ext.define.updateLayout (ext-all-debug.js:31839)
Ext.define.onContentChange (ext-all-debug.js:36116)
Ext.define.updateLayout (ext-all-debug.js:31839)
Ext.define.setTitle (ext-all-debug.js:53058)
Ext.define.setTitle (ext-all-debug.js:55155)
Ext.define.reconfigure (ext-all-debug.js:90310)
Ext.define.show (ext-all-debug.js:90476)
Ext.define.alert (ext-all-debug.js:90600)
Ext.define.onInstanceRetrievalError (BaseWorkflowActionController.js:139)
(anonymous function) (ext-all-debug.js:2265)
Ext.apply.callback (ext-all-debug.js:7437)
Ext.define.Ext.apply.inheritableStatics.load (mock.js:38)
Ext.define.onDocumentClick (BaseWorkflowActionController.js:73)
(anonymous function) (VM6566:6)
Ext.apply.createListenerWrap.wrap (ext-all-debug.js:10786)
AsyncTestCase.test_unknown_error_displays_error_dialog (WorkflowSingleActionController.Test.js:87)

关于会发生什么的任何想法? 还是可以尝试的?

这个问题被交叉发布到http://www.sencha.com/forum/showthread.php?288372-Error-calling-Ext.Msg.alert-from-js-test-driver-tests&p=1053744#post1053744

问题在于js-test-driver运行以下代码,该代码会在每次测试结束时从DOM中删除所有内容。

var testRunnerPlugin =
      new jstestdriver.plugins.TestRunnerPlugin(Date, function() {
    jstestdriver.log(jstestdriver.jQuery('body')[0].innerHTML);
    jstestdriver.jQuery('body').children().remove();
    jstestdriver.jQuery(document).unbind();
    jstestdriver.jQuery(document).die();
}, runTestLoop);

因此,渲染到身体上的全局Ext.Msg变成孤立的,并且在尝试同步阴影时失败。

解决方案是不使用全局Ext.Msg ,如果要在js-test-driver中对代码进行测试,请始终实例化一个新的Ext.message.MessageBox

这是一个测试案例,可重现完全相同的堆栈跟踪https://fiddle.sencha.com/#fiddle/7i1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM