2016-11-07 5 views
1

Я хочу вызвать module.api.create из моего теста транспортира. Ссылаясь это решение: - Chain multiple Node http request Я использую запрос-обещание + Co вроде этого: -request-prom + co API триггер в тесте транспортира

//api/module1.js 
var co = require('co'); 
var rp = require('request-promise'); 

exports.create = co(function* def() { 
    var response, token; 
    urlLogin.body.username = username; 
    response = yield rp(urlLogin); 
    //extract token and run other APIs 
    ... 
}).catch(err => console.log); 

И

//api/api.js 
var module1= require('./module1'), 
exports.module1= function(){ 
    return module1; 
}; 

В моей Spec/Test Я добавляю

api = require('../../api/api'); 
api.module1.create; 

Issue я столкнулся, даже не назвав «api.module1.create»; line, требуется строка «api = require (« ../../ api/api »); звонит автоматически создавать каждый раз-тест выполняется

+0

Вы хотите использовать 'co.wrap' для создания функции вместо' co' для оценки обещания? – Bergi

ответ

1

От coREADME:

[email protected] был освобожден, которая теперь опирается на обещания. Это шаг к предложению async/wait. Первичным изменением API является способ вызова co(). Раньше co возвращал «thunk», который вы вызывали с помощью обратного вызова и необязательных аргументов. Теперь co() возвращает обещание.

Я считаю, что вы ищете co.wrap, который возвращает функцию, которая выполняет генератор и возвращает обещание (эта функция может быть также известной как стук). Используя только co, он с готовностью выполняет генератор и возвращает результат выполнения генератора.

const co = require('co') 

co(function*() { 
    // this will run 
    console.log('hello from plain co!') 
}) 

co.wrap(function*() { 
    // this won't run because we never call the returned function 
    console.log('hello from wrapped co 1!') 
}) 

const wrappedfn = co.wrap(function*() { 
    // this runs because we call the returned function 
    console.log('hello from wrapped co 2!') 
}) 

wrappedfn() 

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

exports.create = function() { 
    return co(function*() { 
    // this will run only when exports.create is called 
    console.log('hello from plain co!') 
    }) 
    // If you want to do stuff after and outside the generator but inside the enclosing function 
    .then(...) 
} 

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

  • Нет связанных вопросов^_^