在Sencha Test中使用hasCls时遇到错误

时间:2017-06-15 17:27:08

标签: extjs sencha-test sencha-test-2.1

Sencha Test 2.1

是否存在关于在期望中使用hasCls的错误?

让我说我有类似的东西:

this.component().gotoButton('[text=See]').gotoComponent('menucheckitem[text=some text]')
            .and(function (el) {
                el.hasCls('x-menu-item-checked'); //this works correctly, validates the el has the class and returns a timeout if the el doesn't actually have the class
                expect(el.hasCls('x-menu-item-checked')).toBe(true); // but doing this throws a nasty error, see the detail below
        });

(虽然在这种情况下,它是一个组件而不是一个元素,但元素会发生同样的事情)

所以我尝试引用不同的元素,并且总是试着这样做:

expect(el.hasClass('some')).toBe(true);

我收到此错误,想知道我是否遗漏了某些内容,或者这是一个错误。

我在文档中看到这应该是可能的。 http://docs.sencha.com/sencha_test/2.1.0/api/ST.future.Element.html?#method-and

  

预期的构造函数({context:constructor({breakOnFailure:false,   evaluateTestsOnReady:true,eventDelay:500,eventTranslation:true,   failOnMultipleMatches:true,globals:Object({speechSynthesis:true,   缓存:true,localStorage:true,sessionStorage:true,   webkitStorageInfo:true,indexedDB:true,webkitIndexedDB:true,   ondeviceorientationabsolute:true,ondeviceorientation:true,   ondevicemotion:true,crypto:true,postMessage:true,blur:true,   focus:true,close:true,stop:true,open:true,alert:true,   applicationCache:true,performance:true,confirm:true,onunload:   true,onunhandledrejection:true,onstorage:true,prompt:true,   onrejectionhandled:true,onpopstate:true,onpageshow:true,print:   true,onpagehide:true,ononline:true,onoffline:true,   requestAnimationFrame:true,onmessage:true,onlanguagechange:true,   onhashchange:true,cancelAnimationFrame:true,onbeforeunload:true,   onwaiting:true,onvolumechange:true,captureEvents:true,ontoggle:   true,ontimeupdate:true,onsuspend:true,releaseEvents:true,   onsubmit:true,onstalled:true,onshow:true,getComputedStyle:true,   onselect:true,onseeking:true,onseeked:true,matchMedia:true,   onscroll:true,onresize:true,moveTo:true,onreset:true,   onratechange:true,onprogress:true,moveBy:true,onplaying:true,   onplay:true,onpause:true,onmousewheel:true,resizeTo:true,   onmouseup:true,onmouseover:true,resizeBy:true,onmouseout:true,   onmousemove:true,onmouseleave:true,onmouseenter:true,   getSelection:true,onmousedown:true,onloadstart:true,   onloadedmetadata:true,find:true,onloadeddata:true,onload:true,   getMatchedCSSRules:true,onkeyup:true,onkeypress:true,onkeydown:   true,webkitRequestAnimationFrame:true,oninvalid:true,oninput:   true,onfocus:true,onerror:true,webkitCancelAnimationFrame:true,   onended:true,onemptied:true,webkitCancelRequestAnimationFrame:   是的,onduratio ...

1 个答案:

答案 0 :(得分:1)

对于浏览器内情景,是的,这绝对有用。但是,我怀疑您使用的是基于WebDriver的方案。在这些场景类型中,传递给and()的参数不是组件或元素实例(因为您永远无法访问基于WebDriver的场景规范中的那些),而是未来本身:

  

根据和()的文档:“如果方案是WebDriver方案,那么arg将是>当前的未来”

所以在这个例子中,你第一次调用“el.hasCls(...)”是在组件future上调用hasCls方法,它返回未来。

这解释了expect()失败的原因,因为ST.future.Component.hasCls()不返回布尔值,而是返回未来的实例:

http://docs.sencha.com/sencha_test/2.1.0/api/ST.future.Element.html#method-hasCls

在这个特定的用例中,你实际上并不需要 expect(),因为未来的 hasCls()方法充当默认断言的存在关于未来组成部分的课程。