Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 处理多个事件侦听器_Unit Testing_Qunit - Fatal编程技术网

Unit testing 处理多个事件侦听器

Unit testing 处理多个事件侦听器,unit-testing,qunit,Unit Testing,Qunit,更新:这是我的一个小问题。测试通过一次,下次失败: 问题是部门有事件。在(“userSet:company”)上,这两个变量都响应事件 这是一个关于单元测试的一般性问题。在我的应用程序中,某个事件被触发,我的应用程序的其他几个部分会侦听此事件。我想分别对每个部件进行单元测试,因为它们执行不同的功能;但要做到这一点,我必须在每次测试中触发事件 这会导致问题,因为第一个测试必须触发事件,从而触发其他测试中的侦听器。在仍然测试多个事件侦听器的情况下,如何保持测试的原子性 (我正在使用QUnit,但

更新:这是我的一个小问题。测试通过一次,下次失败:

问题是
部门
事件。在(“userSet:company”)
上,这两个变量都响应事件


这是一个关于单元测试的一般性问题。在我的应用程序中,某个事件被触发,我的应用程序的其他几个部分会侦听此事件。我想分别对每个部件进行单元测试,因为它们执行不同的功能;但要做到这一点,我必须在每次测试中触发事件

这会导致问题,因为第一个测试必须触发事件,从而触发其他测试中的侦听器。在仍然测试多个事件侦听器的情况下,如何保持测试的原子性

(我正在使用QUnit,但我认为这是一个更一般的单元测试问题)

回答:


杰弗森是对的。解决这个问题的一个简单方法是使用events.once而不是events.on。通过这种方式,您可以清除每次测试中的事件。

所有对异步方法的调用都应该使用“asyncTest”方法进行测试,并确保在断言数据准备好收集和分析时,将调用封装在调用QUnit.start()的其他函数中

我用工作代码更新了您的JSFIDLE: 新守则是:

QUnit.config.autostart = false;
QUnit.config.testTimeOut = 1000;

asyncTest('Some test that needs companies.', function() {
    function getCompanies() {
        var companies = new Companies();
        ok(1);
        start();
    }
    setTimeout(getCompanies, 500);
});

asyncTest('Some other async test that triggers a listener in companies.', function() {   
    var companies = new Companies();

    events.trigger("userSet:company", { name: "Acme", id: 1 });

    stop();
    events.on('fetched:departments', function(response) {
        console.log(response);
        deepEqual(response, [1, 2, 3]);
        start();
    });
});
有关更多详细信息,请参见我在另一个问题中的回答:


希望这对你有帮助

所有对异步方法的调用都应该使用“asyncTest”方法进行测试,并确保在断言数据准备好收集和分析时,将调用封装在调用QUnit.start()的其他函数中

我用工作代码更新了您的JSFIDLE: 新守则是:

QUnit.config.autostart = false;
QUnit.config.testTimeOut = 1000;

asyncTest('Some test that needs companies.', function() {
    function getCompanies() {
        var companies = new Companies();
        ok(1);
        start();
    }
    setTimeout(getCompanies, 500);
});

asyncTest('Some other async test that triggers a listener in companies.', function() {   
    var companies = new Companies();

    events.trigger("userSet:company", { name: "Acme", id: 1 });

    stop();
    events.on('fetched:departments', function(response) {
        console.log(response);
        deepEqual(response, [1, 2, 3]);
        start();
    });
});
有关更多详细信息,请参见我在另一个问题中的回答:

希望这对你有帮助