2016-02-08 2 views
2

Я пытаюсь использовать co-mocha, чтобы проверить некоторые функции вложенных генераторов в моем приложении koa. Класс работает нормально во время выполнения, но когда я пытаюсь проверить функциональность, я не могу заставить вложенный генератор работать в моем тесте.Как проверить вложенные генераторы ES6 с помощью Mocha?

Класс испытывается:

import Promise from 'bluebird' 

class FooService { 
    _doAsync(){ 
    return new Promise((resolve) => { 
     setTimeout(() => { 
     resolve({ 
      foo: 'FOO' 
     }) 
     }, 500) 
    }) 
    } 

    create(){ 
    console.log('This never gets logged') 
    let self = this 
    return function*(){ 
     console.log(`This doesn't either`) 
     return yield self._doAsync() 
    } 
    } 
} 
export default new FooService() 

Test File

import fooService '../services/foo-service' 
import Chai from 'chai' 
let expect = Chai.expect 

describe('Testing generators',() => { 
    it('Should just work', function *(){ 
    console.log('This log never happens') 
    let result = yield fooService.create() 
    expect(result).to.equal({foo: 'FOO'}) 
    }) 
}) 

Я бегу мокко ж/--require co-mocha и Node 4.2.6

Пока испытания полный вес/o, NONE из вышеприведенной консоли больше регистрируется, и поэтому я уверен, что фактические теги t генератор никогда не работает вообще.

Если я пытаюсь с помощью пакета НМП, mocha-generators вместо этого, в то время как я получаю журнал внутри испытательного генератора, основной генератор вернулся из create() метода на службе никогда не выстреливает ...

Что я делаю неправильно??

+1

Вы, вероятно, хотите 'выход * fooService.create()() ' – Bergi

+0

Никогда не экспортируйте экземпляры классов! Либо экспортируйте класс, либо не используйте синтаксис 'class' и создайте вместо него литерал объекта. – Bergi

+0

@Bergi Как бы изменилась эта строка, изменив что-нибудь (в случае 'co-mocha'), когда генератор, на котором сидит строка, никогда не появляется в первую очередь? – RavenHursT

ответ

2

Без mocha-generators обратный вызов it возвращает генератор, который не будет управляться кем-либо. Вам нужно будет обернуть его в co вручную, чтобы мокка получила обещание.

С mocha-generators ваш генератор выполнен, но дает функцию генератора. Этого не ожидается, вы должны давать обещания. Вам нужно вызвать функцию генератора, что create() вызов возвращает себя, и тогда вы не должны yield генератор сам, а передать ему через yield*:

let result = yield* fooService.create()(); 
Смежные вопросы