node.js - 在 mocha 中使用 sinon 创建请求 stub

标签 node.js mocha.js sinon

我正在使用 mocha 来测试一些类,我需要创建一个 request 库的 stub 。

我正在使用 sinon,我能够创建 request.get 方法的 stub ,但我无法创建request 方法(http 调用尝试连接到服务器)。正如我所读到的, request.getrequest 的别名,但是当我 stub request.get 它对 request 没有影响 调用。

此代码有效(使用 request.get):

在测试中:

request = require 'request'

describe "User test", ->
  user = {}
  before (done) ->
    user = new test.user('Ander', 18)    
    sinon.stub(request, 'get').yields(null, {statusCode: 200}, 'foo')        
    done()
  after (done) ->
    request.get.restore()
    done()
  it "testing server response", ->
    user.getData().should.equal 'ander'

来源:

request = require 'request'

class User
  contructor(@name, @age): ->
  getData: ->
    mydata = ''
    request.get 'http://127.0.0.1:8080/', (err, response, body) ->        
      if not err and response.statusCode == 200
        mydata = body
      else
        err = throw new Error "Errorea"
    mydata

但这不起作用(尝试连接到提供的 url):

在测试中:

request = require 'request'

describe "User test", ->
  user = {}
  before (done) ->
    user = new test.user('Ander', 18)    
    sinon.stub(request, 'Request').yields(null, {statusCode: 200}, 'foo')
    #Creating the stub this way, doesn't work neither
    #sinon.stub(request, 'get').yields(null, {statusCode: 200}, 'foo')
    done()
  after (done) ->
    request.Request.restore()
    done()
  it "testing server response", ->
    user.getData().should.equal 'ander'

来源:

request = require 'request'

class User
  contructor(@name, @age): ->
  getData: ->
    mydata = ''
    request 'http://127.0.0.1:8080/', (err, response, body) ->        
      if not err and response.statusCode == 200
        mydata = body
      else
        err = throw new Error "Errorea"
    mydata

request 调用创建 stub 的正确方法是什么? stub的方法是什么?

最佳答案

虽然request是一个很棒的库,它不是结构良好的 API 的一个很好的例子。因为模块 request被定义为具有附加方法的函数(类似于 express ),因为我知道你不能为函数 request 创建 stub 与 sinon .

你能做的最好的事情就是避免使用request在您的代码中运行并仅使用 request.get , request.post等,您可以轻松地 stub 。

Request 创建 stub 在您的第二个示例中没有帮助,因为 Request 不是一种方法,请参阅 source code .

关于node.js - 在 mocha 中使用 sinon 创建请求 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20050507/

相关文章:

javascript - 使用 Mocha 测试 Promises 时,如何在发生错误时打印完整的堆栈跟踪

javascript - 使用 Sinon 测试调用方法的构造函数

javascript - Sinon Spies——测试递归(可能还有 const)函数表达式

javascript - 使用 Node JS 和 MySql 的搜索功能?

javascript - node.js,setTimeout回调方法和 "this"

javascript - 我无法在 .then() Promise 中返回对象

angularjs - Webpack构建中的sinon模拟超时错误- 'undefined'不是对象(评估 'modules[moduleId].call'

javascript - sinon spy 不在生成器循环中注册调用?

javascript - 如何用QUnit和Sinon模拟cookie?

node.js - 找到node.js的css文件