2017-02-07 12 views
2

Я пытаюсь написать простой тест -Мокко бросают «метод Резолюции overspecified»

describe("My test", function(){ 
    it("Succeed", function*(done){ 
    yield testFunc(); 
    done() 
    }) 
}) 

function *testFunc(){ 
    console.log("Hey!") 
} 

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

ошибка, что я получаю -

Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both. 

Теперь документы четко указано -

когда тест вводит функцию обратного вызова (предполагая, асинхронное выполнение), называет его, и возвращает Обещают, Mocha теперь сгенерирует исключение

https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#boom-breaking-changes

Однако, Я не возвращаю обещание! Я впрыскиваю функцию done, которая является обратным вызовом, но я не возвращаю обещание ... уступка testFunc не возвращает Promise.

Итак, почему этот тест выдает ошибку?

Благодаря

ответ

2

Генератор (function*) или, скорее, это сопрограммная создающей обертка, это неявное здесь, скорее всего, возвращающая обещание. Я не совсем уверен, как co-mocha работает здесь, но, возможно, это будет работать:

describe("My test", function() { 
    it("Succeed", function*() { 
    yield testFunc(); 
    return; 
    }); 
}); 

Возвращение не нужен здесь, просто добавил для ясности.

Но вы, возможно, придется изменить:

function *testFunc(){ 
    console.log("Hey!") 
} 

к чему-то вроде:

let testFunc = co.wrap(function*() { 
    console.log("Hey!"); 
}); 

для вашего yield в коде выше, чтобы работать.

Если вы используете co сопрограммы, то ваши генераторы должны давать обещания. Здесь генератор дает результат запуска функции генератора, которая сама возвращает генератор, а не обещание.

1

Ваше предположение о том, что обещание не используется, неверно. co-mocha использует co.wrapinternally, чтобы обернуть функции, перейдя на страницу it. Документация co.wrap говорит:

Преобразовать генератор в обычную функцию , которая возвращает Promise.

Акцент добавлен.