2015-05-20 3 views
1

У меня есть блок кода, который я буду использовать несколько раз в рамках инструкции then в mocha, поэтому я превратил ее в функцию. Однако мне также нужно вызвать done() внутри этой функции, и она выходит из области видимости, что приводит к ошибке Непринятый ReferenceError: done не определен. Вот фрагмент кода:Как передать функцию обратного вызова mochas в другую вспомогательную функцию

var collectionChecker = function(results) { 
    expect(Array.isArray(results), 'Did not return collection'); 
    expect(results.length === numAttr, 'Returned wrong number of models'); 
    done(); 
}; 

test('returns a collection with correct number of models', function(done) { 
    attrs.getAttributeTemplates().then(collectionChecker); 
}); 

Как я могу передать done() к моей функции?

Я нашел обходное решение, связав другое. Затем и вызывая его, но это кажется уродливым способом сделать это.

ответ

1

Вы overthinking это - мокко поддерживают обещания, вы можете вернуть обещание и, если оно выполнено испытание будет проходить (и если ожидает бросить это не получится):

var collectionChecker = function(results) { 
    expect(Array.isArray(results), 'Did not return collection'); 
    expect(results.length === numAttr, 'Returned wrong number of models'); 
}; 

// just add a return, no `done` here or anywhere  
test('returns a collection with correct number of models', function() { 
    return attrs.getAttributeTemplates().then(collectionChecker); 
}); 
+0

Спасибо! Это именно то, что я искал. Я пытался сделать что-то подобное в другом тесте, и он работал не так, как ожидалось. Я пытался вернуть цепочку потомков, и он всегда оценивал истину, несмотря на успех или неудачу ожидания внутри самого сокровенного. Любое предложение о том, как справиться с этой ситуацией? – novacog

+0

@novacog, если у вас есть конкретный случай, пожалуйста, откройте новый вопрос, я обещаю взглянуть. –

Смежные вопросы