Jasmine jQuery:使用toBeHidden()和toBeVisible()

can*_*era 7 bdd jquery jasmine jasmine-jquery

我需要帮助使用jQuery-Jasmine的方法toBeHidden()toBeVisible()方法.

当用户选中复选框时,文本字段应向下滑动 - 并取消选中将其向上滑动.页面加载时隐藏文本字段.

代码在我的应用程序中工作正常,但我对我在测试中得到的结果感到困惑.

前两个正在工作 - 检查字段是否默认隐藏并在第一次更改时可见:

expect($('#text-field')).toBeHidden(); // passes

$('#checkbox').prop('checked', true).change();
expect($('#text-field')).toBeVisible(); // passes
Run Code Online (Sandbox Code Playgroud)

但是当取消选中该复选框时,文本字段会在实际版本中向上滑动但在我的测试中失败:

$('#checkbox').prop('checked', false).change();
expect($('#text-field')).toBeHidden(); // fails
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

expect($('#text-field')).not.toBeVisible(); // fails
expect($('#text-field')).toHaveCss({display: "none"}); // fails
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么或知道我还需要做些什么来帮助Jasmine看到文本字段滑了?

Daa*_*aan 10

您可能遇到了与我相同的问题,您的视图在测试中是标准的,因为它没有附加到DOM.在测试中试试这个:

$('body').append(view);
Run Code Online (Sandbox Code Playgroud)


Fra*_*ijk 5

.toBeHidden和/ .toBeVisible或不对立,请参阅Jasmine-jquery文档.我建议你使用.toBeHidden.not.toBeHidden结合使用.

请注意,.toBeHiddenthis.actual.is(':hidden')意味着它不占用空间(https://api.jquery.com/hidden-selector/),因此,预计您的灯具追加到身体.

.toBeVisible检查this.actual.is(':visible')哪个,根据jQuery文档,意味着它检查元素是否有visibility: hiddenopacity: 0.所以它可能消耗空间,但应该没有可见性.