Асинхронные тестовые случаи с nodeunit

Я хочу протестировать многие методы один за другим, при этом вывод одного метода должен быть передан следующему методу.

Например: у меня есть 2 метода для тестирования, называемые добавлением и удалением. добавление метода onsuccess вернет добавленный объект (с его идентификатором). тот же объект, который я хочу передать методу удаления, чтобы созданный объект был удален.

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()
    });
}

Один из способов - определить объект узла вне этих двух функций и получить доступ к обоим методам.

Мне просто интересно, правильный ли это способ или есть лучший подход.


person Royal Pinto    schedule 26.05.2013    source источник


Ответы (2)


Обычной практикой является изоляция тестов друг от друга. Существуют наборы тестов, которые запускают тесты в случайном порядке, чтобы убедиться, что пользователи не полагаются на какой-либо порядок.

Поэтому, если ваш второй тест проверяет возможность удаления добавленного узла, он должен убедиться, что этот элемент доступен. Вероятно, что-то вроде этого:

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 тоже не пройдет. Тем не менее, я думаю, что это приемлемо здесь, если здесь трудно издеваться над поведением добавления.

person Sebastian vom Meer    schedule 26.05.2013
comment
Спасибо за ваш ответ. Мне нравится эта идея вызова del в случае успеха добавления (мы можем добавить цепочку тестовых случаев и вызвать один из них в случае успеха другого тестового примера). - person Royal Pinto; 29.05.2013
comment
Да, это отвечает на мой вопрос, но единственная проблема, которую я вижу, заключается в том, что мне нужно сделать один тестовый пример для удаления, который также добавляется. Я хотел сделать 2 отдельных тестовых случая, которые тестируют 2 отдельных метода. В любом случае, я сделаю так, как ты сказал. Спасибо. - person Royal Pinto; 29.05.2013

Если вы сейчас используете этот nodeunit, https://github.com/caolan/nodeunit, как я предположим, что вы определенно проверяете другой проект автора Async (https://github.com/caolan/async ). Я думаю, что функция водопада — это то, что вам нужно. Я искал аналогичный ответ, который привел меня на эту страницу, поэтому я собираюсь попробовать и дам вам знать, как это происходит.

person Gideon Rosenthal    schedule 20.12.2013