具有nodeunit的异步测试用例

时间:2013-05-26 09:08:19

标签: javascript node.js nodeunit

我想一个接一个地测试多个方法,一个方法输出必须传递给下一个方法。

例如:我有两种测试方法,称为添加和删除。 add方法的onsuccess将返回添加的对象(带有id)。我希望传递给删除方法的同一个对象,以便删除创建的对象。

exports.add = function(test) {
    nodemanager.add({
        name : 'my name'
    }, function(node) {
        //this is onsuccess callback.
        test.ok(node && node.id, 'Failed to get added node\'s info');
        test.done();
    });
}

exports.del = function(test) {
    //Here i need to pass node object returned from onsuccess on add method.
    nodemanager.del(node, function(node) {
        test.ok(node, 'Deleted node is null');
        test.done()
    });
}

一种方法是,在这两个函数之外定义节点对象,并从这两个方法中进行访问。

我只是想知道这是否是正确的方法,还是有更好的方法。

2 个答案:

答案 0 :(得分:0)

通常的做法是将测试彼此隔离。有些测试套件以随机顺序运行测试,以确保用户不依赖任何订单。

因此,如果您的第二个测试检查可以删除添加的节点,则应确保此元素可用。可能是这样的:

exports.add = function(test) {
    nodemanager.add({
        name : 'my name'
    }, function(node) {
        test.ok(node && node.id, 'Failed to get added node\'s info');
        test.done();
    });
}

exports.del = function(test) {
    nodemanager.add({
        name : 'my name'
    }, function(addedNode) {
        nodemanager.del(addedNode, function(deletedNode) {
            test.ok(deletedNode, 'Deleted node is null');
            test.done()
        });
    });
}

当然这个解决方案还有另一个问题:如果nodemanager.add破坏你的del测试也会失败。但是,我觉得这里可以接受,如果这里很难模仿添加行为。

答案 1 :(得分:0)

如果您当前正在使用此nodeunit,https://github.com/caolan/nodeunit,我认为您肯定会查看作者的其他项目Async(https://github.com/caolan/async)。我认为瀑布功能是你正在寻找的。我正在寻找一个类似的答案,这导致我进入这个页面所以我即将试一试,并会告诉你它是怎么回事。