2011-11-05 22 views
33

वहाँ इकाई परीक्षण middlewares लिए HTTP अनुरोध और प्रतिक्रिया वस्तुओं उपहास करने के लिए सुविधाजनक तरीका है?Node.js: नकली http अनुरोध और प्रतिक्रिया

+0

एक कारण आप अपने परीक्षण के मामले में वास्तविक HTTP अनुरोध शामिल नहीं है है? एक async परीक्षण सेटअप में reallx व्यवहार्य होना चाहिए। –

+9

मैं इसके साथ गया, लेकिन ईमानदार होने के लिए यह एक यूनिट परीक्षण की तरह महसूस नहीं करता है, यह एकीकरण की तरह अधिक है। वैसे भी, अब तक मेरा सबसे अच्छा विकल्प है। – 7elephant

+4

मैं असली http अनुरोधों को शामिल नहीं करना चाहता क्योंकि यह मेरे परीक्षण धीमे, और कम विश्वसनीय बनाता है। उदाहरण के लिए, यदि मैं सेवाओं में से एक को डीबी का समर्थन करता हूं, और यह विफल रहता है क्योंकि क्यूए में डीबी को मिटा दिया गया है (या प्रोड के साथ सिंक किया गया है, या जो भी हो) तो मेरे परीक्षण विफल होने लगते हैं। इसके अलावा यदि आप नकल नहीं करते हैं तो कुछ त्रुटि मामलों को विश्वसनीय रूप से मजबूर करने के लिए यह असंभव है। नहीं, मुझे मोजे पसंद हैं - वे परीक्षण को आसान और अधिक विश्वसनीय बनाते हैं। – Kevin

उत्तर

1

मैं nodejutsu नकली उपयोग कर रहा हूँ:

https://github.com/nodejitsu/mock-request

हो सकता है कि यह आपके लिए क्या देख रहे है।

+4

परियोजना को बहिष्कृत किया गया है। सिफारिश "nock" का उपयोग करना है https://github.com/flatiron/nock –

+3

नॉक http अनुरोधों को पुन: स्थापित करने के लिए काम नहीं करता है। – Kevin

1

मैं एक पुस्तकालय लिखा मानक HTTP के माध्यम से या अनुरोध मॉडल के माध्यम से किए गए अनुरोधों का प्रतिक्रियाओं बाहर उपहास करने के लिए:

https://github.com/ctide/fakeweb

24

यह नकली बनाने के लिए इस्तेमाल किया जा सकता दोनों https://github.com/howardabrams/node-mocks-http और https://github.com/vojtajina/node-mocks की तरह लग रहा http.ServerRequest और http.ServerResponse वस्तुओं।

+1

नोड-मैक्स-http मूल पोस्ट के लिए एक महान समाधान की तरह दिखता है। – newz2000

+0

ठीक है, बस इस पर आकर, नोड-मैक्स-http अद्भुत है। (जहां तक ​​वास्तव में HTTP अनुरोध किए बिना परीक्षण अनुरोध हैंडलर) –

7

टैग से, ऐसा लगता है कि इस सवाल का जैसे एक्सप्रेस के बारे में है। उस मामले में, 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": "बार "}

+0

+1 नॉक के लिए +1, बहुत उपयोगी टूल। – undefined

+1

यह एक पुरानी पोस्ट है। लेकिन मेरे पास एक सवाल है। सुपरटेस्ट, जिसमें 'अनुरोध (ऐप) 'है, एक सर्वर (https://github.com/tj/supertest/blob/master/index.js#L20) शुरू करने लगता है, और यह http reqeusts का मज़ाक उड़ा रहा है। क्या यह सच है? – NullSpace

0

https://github.com/timsavery/node-hmock या npm install hmock देखें ... कोई प्रतिक्रिया स्वागत है! समाधान ने अब तक मेरे लिए अच्छा काम किया है।

0

Mockery इस बात के लिए बहुत अच्छा लगता है।

मूलतः यह require कॉल hijacks, और एक अलग वस्तु/समारोह ठूंठ आपके द्वारा निर्दिष्ट देता है।

0

मैं motty उपयोग करने के लिए प्रोत्साहित करते हैं। हमें एक और कोड क्यों चाहिए?

संबंधित मुद्दे