我想从量角器测试中调用module.api.create。参考此解决方案: - Chain multiple Node http request我正在使用request-promise + co这样: -
//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;
};
在我的规格/测试中,我正在添加
api = require('../../api/api');
api.module1.create;
我面临的问题甚至没有调用“api.module1.create”。 line,需求行“api = require('../../ api / api');”每次执行测试时都会自动调用create
答案 0 :(得分:1)
来自co
README:
co@4.0.0已经发布,现在依赖于承诺。它是异步/等待提议的垫脚石。主要API更改是如何调用co()。之前,co返回了一个" thunk&#34 ;,然后你用回调和可选参数调用它。现在,co()返回一个promise。
我相信你正在寻找co.wrap
,它返回一个执行生成器并返回一个promise的函数(这个函数也可以称为thunk)。仅使用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(...)
}