首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟节点网络库函数的返回值?

如何模拟节点网络库函数的返回值?
EN

Stack Overflow用户
提问于 2017-02-07 10:18:35
回答 2查看 443关注 0票数 0

我有一个节点模块,在该模块中,我尝试用以下方式连接到主机:

代码语言:javascript
复制
const testConnection = net.createConnection(port, hostname);

testConnection.on('connect', () => {
   // connected
});

testConnection.on('error', (err) => {
   // error
});

我正在使用Sinon来测试这样的方法:

代码语言:javascript
复制
sinon.stub(net, 'createConnection', (port, hostname) => {
   return {
      on: (string, cb) => {
         switch(string) {
              case 'connect':
                  return cb;
              case 'error':
                  return cb;
              case 'close':
                  return cb;
            }
        }
    }
});

const testConnection = net.createConnection(10, 'hostname');
testConnection.on('error', () => {
   console.log('here I am');
});

但是,我无法理解我应该如何避免存根/模拟或假调用on-方法,这样它就会返回一个错误!

我是不是漏掉了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-07 11:23:00

我会用一个假的createConnection实例来存根EventEmitter返回值:

代码语言:javascript
复制
const EventEmitter = require('events');
const fakeEE = new EventEmitter();
sinon.stub(net, 'createConnection', (port, hostname) => fakeEE);

// require your code

// emit events
fakeEE.emit('error', new Error('Smth bad happened'));

// observe the result
// e.g. expect(something).toBeCalled();
票数 1
EN

Stack Overflow用户

发布于 2017-02-07 11:05:07

由于net是模块的依赖项,所以我会使用丙氧奎尔来伪造该依赖项。ES6 + Babel组合体对我们也很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42087211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档