वहाँ इकाई परीक्षण middlewares लिए HTTP अनुरोध और प्रतिक्रिया वस्तुओं उपहास करने के लिए सुविधाजनक तरीका है?Node.js: नकली http अनुरोध और प्रतिक्रिया
उत्तर
मैं nodejutsu नकली उपयोग कर रहा हूँ:
https://github.com/nodejitsu/mock-request
हो सकता है कि यह आपके लिए क्या देख रहे है।
परियोजना को बहिष्कृत किया गया है। सिफारिश "nock" का उपयोग करना है https://github.com/flatiron/nock –
नॉक http अनुरोधों को पुन: स्थापित करने के लिए काम नहीं करता है। – Kevin
मैं एक पुस्तकालय लिखा मानक HTTP के माध्यम से या अनुरोध मॉडल के माध्यम से किए गए अनुरोधों का प्रतिक्रियाओं बाहर उपहास करने के लिए:
यह नकली बनाने के लिए इस्तेमाल किया जा सकता दोनों https://github.com/howardabrams/node-mocks-http और https://github.com/vojtajina/node-mocks की तरह लग रहा http.ServerRequest
और http.ServerResponse
वस्तुओं।
नोड-मैक्स-http मूल पोस्ट के लिए एक महान समाधान की तरह दिखता है। – newz2000
ठीक है, बस इस पर आकर, नोड-मैक्स-http अद्भुत है। (जहां तक वास्तव में HTTP अनुरोध किए बिना परीक्षण अनुरोध हैंडलर) –
टैग से, ऐसा लगता है कि इस सवाल का जैसे एक्सप्रेस के बारे में है। उस मामले में, supertest बहुत अच्छा है:
var request = require('supertest')
, express = require('express');
var app = express();
app.get('/user', function(req, res){
res.send(201, { name: 'tobi' });
});
request(app)
.get('/user')
.expect('Content-Type', /json/)
.expect('Content-Length', '20')
.expect(201)
.end(function(err, res){
if (err) throw err;
});
सामान्य नोड उपयोग के लिए, Flatiron Nock एक अच्छा विकल्प की तरह दिखता है:
var nock = require('nock');
var example = nock('http://example.com')
.get('/foo')
.reply(200, { foo: 'bar' });
var http = require('http');
var options = {
host: 'example.com',
port: 80,
path: '/foo',
method: 'GET'
}
var req = http.request(options, function(res) {
res.on('data', function(chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('error: ' + e);
});
req.end();
आउटपुट:
शरीर: { "foo": "बार "}
https://github.com/timsavery/node-hmock या npm install hmock
देखें ... कोई प्रतिक्रिया स्वागत है! समाधान ने अब तक मेरे लिए अच्छा काम किया है।
Mockery इस बात के लिए बहुत अच्छा लगता है।
मूलतः यह require
कॉल hijacks, और एक अलग वस्तु/समारोह ठूंठ आपके द्वारा निर्दिष्ट देता है।
मैं motty उपयोग करने के लिए प्रोत्साहित करते हैं। हमें एक और कोड क्यों चाहिए?
एक कारण आप अपने परीक्षण के मामले में वास्तविक HTTP अनुरोध शामिल नहीं है है? एक async परीक्षण सेटअप में reallx व्यवहार्य होना चाहिए। –
मैं इसके साथ गया, लेकिन ईमानदार होने के लिए यह एक यूनिट परीक्षण की तरह महसूस नहीं करता है, यह एकीकरण की तरह अधिक है। वैसे भी, अब तक मेरा सबसे अच्छा विकल्प है। – 7elephant
मैं असली http अनुरोधों को शामिल नहीं करना चाहता क्योंकि यह मेरे परीक्षण धीमे, और कम विश्वसनीय बनाता है। उदाहरण के लिए, यदि मैं सेवाओं में से एक को डीबी का समर्थन करता हूं, और यह विफल रहता है क्योंकि क्यूए में डीबी को मिटा दिया गया है (या प्रोड के साथ सिंक किया गया है, या जो भी हो) तो मेरे परीक्षण विफल होने लगते हैं। इसके अलावा यदि आप नकल नहीं करते हैं तो कुछ त्रुटि मामलों को विश्वसनीय रूप से मजबूर करने के लिए यह असंभव है। नहीं, मुझे मोजे पसंद हैं - वे परीक्षण को आसान और अधिक विश्वसनीय बनाते हैं। – Kevin