Articles of proxyquire

为节点模块映射path,用于unit testing

客户端我用SystemJS将模块path存到模块中,像这样 var systemJsConfig = { baseURL: "./", defaultJSExtensions: true, map: { 'root-components': 'applicationRoot/rootComponents' } }; 所以require('root-components/foo'); 将映射到applicationRoot/rootComponents/foo 。 问题是,如果我用require('root-components/foo');运行一个模块require('root-components/foo'); 在摩卡,节点不知道这个path是什么意思。 是否有一个理想的方式来完成在Node中的path映射? Proxyquire能胜任这个吗? 我阅读他们的文档,但没有发现任何迹象表明它是。 这只是unit testing,所以我很高兴任何解决scheme使用任何forms的党的实用程序。

unit testing使用请求,pipe道和stream使用模拟的私有方法

我想在下面的代码中unit testing导出的方法。 我想嘲笑私有方法中的值来控制返回的Promise的拒绝/parsing。 client是已经连接到数据库的node-postgres对象。 我知道我可以使用proxyquire来取出所需的库,但我怎样才能模仿链接的方法.on('error', …) .pipe(stream)和.on('end', …)我可以控制返回的值。 注意 ,显示的导出方法是对真实导出方法的简化,导出importDomain是不可行的。 const copyFrom = require('pg-copy-streams').from const request = require('request') const Promise = require('bluebird') // private function importDomain (client, domain) { return new Promise((resolve, reject) => { let stream = client.query(copyFrom(`COPY ${domain.table} FROM STDIN;`)) let req = request(`${domain.url}`) req.on('error', reject) req.pipe(stream) .on('error', reject) .on('end', resolve) }) } […]

如何多次声明stubbed的提取

使用proxyquire,sinon和mocha。 我可以在第一次调用fetch时存根。 但是在recursion调用的第二次调用中,我不能断言它。 从输出结果看,在testing结束之前,断言可能会运行。 在断言之后,您将会看到second fetch控制台。 index.js var fetch = require('node-fetch'); function a() { console.log('function a runs'); fetch('https://www.google.com') .then((e) => { console.log('first fetch'); b(); }) .catch((e)=> { console.log('error') }); } function b() { fetch('https://www.google.com') .then((e) => { console.log('second fetch'); }) .catch((e)=> { console.log('error') }); } a() testing: describe('fetch test demo', ()=> { it('fetch should of […]