我正在使用 mocha
来测试一些类,我需要创建一个 request
库的 stub 。
我正在使用 sinon
,我能够创建 request.get
方法的 stub ,但我无法创建request
方法(http 调用尝试连接到服务器)。正如我所读到的, request.get
是 request
的别名,但是当我 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/