2014-09-18 3 views
2

В настоящее время я пытаюсь понять, как работает BDD DSL в Mocha, и я застрял. Я бы хотел этот подход и хочу применить это.Как Мокка определяет уровень гнездования?

Например, следующий тест:

describe('foo', function(){ 
    describe('bar', function(){ 
     it('should be something') 
    }); 
}); 

будет производить выходной:

foo 
    bar 
    - should be something 


0 passing (4ms) 
1 pending 

вопрос: как вызов глобальной функции describe в вложенном блоке определяется как вложенные? Я посмотрел исходный код, но сейчас не могу справиться с основной идеей.

ответ

1

Мокко отслеживает эти вещи в апартаментах, как вы можете видеть из source

/** 
* Describe a "suite" with the given `title` 
* and callback `fn` containing nested suites 
* and/or tests. 
*/ 

context.describe = context.context = function(title, fn){ 
    var suite = Suite.create(suites[0], title); 
    suite.file = file; 
    suites.unshift(suite); 
    fn.call(suite); 
    suites.shift(); 
    return suite; 
}; 

Чтобы упростить вещи немного, для каждого describe, мокко создает новый набор. Люксы могут содержать другие апартаменты.

Для вашего примера, Mocha создает набор foo, который затем содержит набор bar, который содержит тест should be something.

0

Это может быть достигнуто с помощью глобальной структуры данных дерева.

При вызове описывают, мокко добавляет узел, когда вы звоните это, мокко добавляет лист.

Когда корень описывает вызов возвращает, дерево завершено и мокко проходит по узлам, выполняющим листья по одному.

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