如何通过 Qunit 正确测试 jQuery .slideToggle()
How to properly test jQuery .slideToggle() via Qunit
我正在弄清楚如何获得一个有效的 Qunit 测试来验证作用于元素的 .slideToggle() 对其进行着色 up/down。我已经制作了一个非常基本的 Qunit 测试夹具,如此处所示。第一个问题是测试 'shade, not visible' 失败。第二个问题是,将 QUnit.test 放在 done() {} 函数调用中看起来很糟糕。
我尝试了几种不正确的策略,包括测试 is( ':visible'), .css('height'),我认为我通过测试 display:none 得到了它,所以我'我不知道如何让这个测试通过。
我准备了一个 JSFiddle 来显示我认为应该通过的问题测试。
https://jsfiddle.net/chrismcginlay/tjLeqj01/1/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Shading tests</title>
<link rel="stylesheet" href="qunit.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture">
<div id="shade">
<p>Some text to test</p>
</div>
</div>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="qunit.js"></script>
<script>
QUnit.module("Shading Tests");
QUnit.test("shade, visible", function( assert ) {
assert.ok( $( '#shade' ).length, "div exists" );
assert.ok( $( '#shade' ).css( 'height' ) > '0px', "div has height" );
assert.notEqual( $( '#shade' ).css( 'display' ), 'none', "div displayed");
});
$( '#shade' ).slideToggle( "3000" );
$( '#shade' ).promise().done( function() {
alert( 'Done with slideToggle');
QUnit.test("shade, not visible", function( assert ) {
assert.ok( $( '#shade' ).length, "div exists" );
assert.equal(
$( '#shade' ).css( 'display' ), 'none', "div not displayed");
});
});
</script>
</body>
</html>
解决方案,感谢 IRC #jquery 聊天中的 shoky_ 和 robertmaxrees。如您所见,我没有正确部署异步测试。将我问题中链接的 fiddle 更新为工作版本。
QUnit.module("Shading Tests");
QUnit.test("shade, visible", function( assert ) {
assert.ok( $( '#shade' ).length, "div exists" );
assert.ok( $( '#shade' ).css( 'height' ) > '0px', "div has height" );
assert.notEqual( $( '#shade' ).css( 'display' ), 'none', "div displayed");
});
QUnit.test("shade, not visible", function( assert ) {
var done1 = assert.async();
$( '#shade' ).slideToggle( 3000 );
$( '#shade' ).promise().done( function() {
assert.ok( $( '#shade' ).length, "div exists" );
assert.equal( $( '#shade' ).css( 'display' ), 'none', "div not displayed");
});
});
我正在弄清楚如何获得一个有效的 Qunit 测试来验证作用于元素的 .slideToggle() 对其进行着色 up/down。我已经制作了一个非常基本的 Qunit 测试夹具,如此处所示。第一个问题是测试 'shade, not visible' 失败。第二个问题是,将 QUnit.test 放在 done() {} 函数调用中看起来很糟糕。 我尝试了几种不正确的策略,包括测试 is( ':visible'), .css('height'),我认为我通过测试 display:none 得到了它,所以我'我不知道如何让这个测试通过。
我准备了一个 JSFiddle 来显示我认为应该通过的问题测试。 https://jsfiddle.net/chrismcginlay/tjLeqj01/1/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Shading tests</title>
<link rel="stylesheet" href="qunit.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture">
<div id="shade">
<p>Some text to test</p>
</div>
</div>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="qunit.js"></script>
<script>
QUnit.module("Shading Tests");
QUnit.test("shade, visible", function( assert ) {
assert.ok( $( '#shade' ).length, "div exists" );
assert.ok( $( '#shade' ).css( 'height' ) > '0px', "div has height" );
assert.notEqual( $( '#shade' ).css( 'display' ), 'none', "div displayed");
});
$( '#shade' ).slideToggle( "3000" );
$( '#shade' ).promise().done( function() {
alert( 'Done with slideToggle');
QUnit.test("shade, not visible", function( assert ) {
assert.ok( $( '#shade' ).length, "div exists" );
assert.equal(
$( '#shade' ).css( 'display' ), 'none', "div not displayed");
});
});
</script>
</body>
</html>
解决方案,感谢 IRC #jquery 聊天中的 shoky_ 和 robertmaxrees。如您所见,我没有正确部署异步测试。将我问题中链接的 fiddle 更新为工作版本。
QUnit.module("Shading Tests");
QUnit.test("shade, visible", function( assert ) {
assert.ok( $( '#shade' ).length, "div exists" );
assert.ok( $( '#shade' ).css( 'height' ) > '0px', "div has height" );
assert.notEqual( $( '#shade' ).css( 'display' ), 'none', "div displayed");
});
QUnit.test("shade, not visible", function( assert ) {
var done1 = assert.async();
$( '#shade' ).slideToggle( 3000 );
$( '#shade' ).promise().done( function() {
assert.ok( $( '#shade' ).length, "div exists" );
assert.equal( $( '#shade' ).css( 'display' ), 'none', "div not displayed");
});
});