0

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

例如:我有两种测试方法,称为添加和删除。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()
    });
}

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

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

4

2 回答 2

0

如果您当前正在使用这个 nodeunit,https://github.com/caolan/nodeunit,因为我假设您肯定会查看作者的其他项目 Async ( https://github.com/caolan/async )。我认为瀑布功能是您正在寻找的。我一直在寻找类似的答案,这使我进入了此页面,因此我将尝试一下,并让您知道情况如何。

于 2013-12-20T05:32:49.773 回答
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 测试也会失败。但是,如果在这里很难模拟添加行为,我认为这是可以接受的。

于 2013-05-26T20:15:00.877 回答