我想知道您是否经历过“nock”模块拦截http请求但没有任何日志记录就停止的情况……至少在我看来。我可能错了。这是测试:
...
suite('Successful SAVE: ', function(){
setup(function(){
domain = new Domain({attrOne:1, attrTwo:2});
minDriver = nock('http://localhost:3002')
.log(console.log)
.filteringRequestBody(function(path) {
return '*';
})
.post('/minnehaha/api/review/', '*')
.reply(201, {ok: true, id: ID, version: VER});
});
suite('saving domain', function(){
...
test('saving review...', function(done){
//the domain module makes http POST request
domain.save(function(err){
if(err){
console.log("Error saving: " + err.message);
}
});
done();
});
...
如您所见,Nock 的日志记录已打开,但它没有记录任何内容。模块在 test - domain 中发出的 HTTP 请求被拦截,这意味着它没有到达实际的服务器。res.on('data' or 'end') 不会从模块中的请求中调用:
http = require 'http'
class Domain
...
save: (fn) ->
post_data = JSON.stringify(@)
options =
host: "localhost"
port: 3002
path: "/minnehaha/api/review/"
method: "POST"
headers:
'Content-Type': "application/json"
'Content-Length': post_data.length
req = http.request options, (res) ->
body = ''
res.setEncoding 'utf8'
res.on 'data', (chunk) ->
body += chunk
res.on 'end', () ->
newReview = JSON.parse(body)
return fn null
req.on 'error', (e) ->
console.log 'problem with POST Review request to controller: ' + e.message
req.write post_data + '\n'
module.exports = Domain
如果关闭 Nock 拦截,则该模块工作(到达服务器并由模块处理响应)。有了这个,我得出结论,问题是箭尾拦截。此外,如果 HTTP POST 请求是从测试文件本身发出的,而不是从模块发出的,它就可以工作……测试文件在 JS 中,但在 CoffeeScript 中的模块……这不重要吗?任何帮助表示赞赏