繁体   English   中英

Qunit:测试泄漏

[英]Qunit: Test leakage

我在测试我的jQuery插件时遇到了泄漏问题。 当我想模拟文字对象上的值或函数时,会出现问题。

例:

test('Overwrite some default setting', function(){
    $.fn.plugin.defaults.bar = 'foo';
});

test('Bar should be undefined', function(){
    equals( $.fn.plugin.defaults.bar, undefined );
});

此测试将失败,因为第一个测试将'bar'var添加到默认值。 我使用以下代码修复它,但是复制副本看起来并不优雅。

$(function(){

    /*
     * Trolley Button Base: Options.
     */

    var defaults_copy = $.extend({}, $.fn.plugin.defaults );

    var setdown = {
        setup : function(){
            $.fn.plugin.defaults = $.extend({}, defaults_copy);
        },

        teardown : function(){ }
    };

    module('Test leakage', setdown );

    test('Overwrite some default setting', function(){
        $.fn.plugin.defaults.bar = 'foo';
    });

    test('Bar should be undefined', function(){
        equals( $.fn.plugin.defaults.bar, undefined );
    });

})

此外,如果我在jQuery命名空间中有一些对象,如果我必须为每个对象获取多个副本,它可能会变得有点混乱。 所以有人想知道有没有更好的解决方案'重置'所有对象?

这是QUnit的设计。 在每次测试结束时,您应该清理您所做的任何状态更改。 我不知道自动执行此操作的方法 - 您必须编写代码来撤消您编写的任何测试代码的效果,如下所示:

test('Overwrite some default setting', function(){
    // test code
    $.fn.plugin.defaults.bar = 'foo';

    // cleanup code
    delete $.fn.plugin.defaults.bar;
});

test('Bar should be undefined', function(){
    equals( $.fn.plugin.defaults.bar, undefined );
});

为了防止测试顺序依赖性问题并完全隔离单元测试,您需要通过为每个测试创建一个函数并在每个测试方法的开头和结尾包含它来手动实现测试级别设置和拆除功能:

例如$(document).ready(function(){

    // Test Setup/TearDown
    function codeUnderTestModuleTestSetup() {
        //any setup needed
    }

    function resetDefaults() {
        //code in here to reset defaults
    }

    function resetSomethingElse() {
        //code in here to reset something else
    }

    function codeUnderTestModuleTestTearDown() {
        resetDefaults();
        resetSomethingElse();
    }

    //Tests
    module('Your module title Test Harness');    

    test('FunctionUnderTest_Behaviour_ExpectedResult', 1, function () {
        codeUnderTestModuleTestSetup();

        //Arrange
        //code removed

        //Act
        //Code removed

        //Assert
        //Code removed

        codeUnderTestModuleTestTearDown();
    });

}

如有必要,您也可以手动实现模块级别和测试运行级别设置和拆卸功能。

暂无
暂无

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

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