node.js - मेरे एक्सप्रेस आधारित एपीआई पर कैसे मैं सेटअप कोड कवरेज कर सकता हूं?




express code-coverage (2)

इस्तानबुल के साथ अपने अनुभव के आधार पर, मुझे लगता है कि वास्तव में किस मार्ग का उपयोग किया जा रहा है, इसके संदर्भ में तर्क त्रुटि हो सकती है कृपया उस परीक्षण को उपयोग करने के लिए सेट करें। it.only और फिर इस्तानबुल कवरेज देखें। (इस्तानबुल मिडलवेयर का उपयोग करने की कोई जरूरत नहीं है, क्योंकि आपके डेवलपर्स को स्थानीय फाइल सिस्टम पर लिखा जा रहा है HTML आउटपुट तक पहुंच है।)

कृपया दिखाएं कि वास्तव में किन मार्ग को कवर किया जा रहा है, क्योंकि इस्तानबुल बहुत चालाक है कि यह कैसे बयान करता है।

यदि आपको इस्तानबुल में एक बग मिला है, तो मैं आपको बग पोस्ट करने के लिए प्रोत्साहित करता हूँ

मैं थोड़ी देर के लिए इस समस्या पर रहा हूं और मैं मौजूदा समाधान मेरे लिए काम नहीं कर सकता

मेरे पास Express.js में लिखी एक नोड। जेएस एपीआई है I मैं Mocha, चाई, और सुपटेस्ट का उपयोग कर एपीआई के लिए परीक्षण लिख रहा हूं। ये परीक्षण ज्यादातर एकीकरण परीक्षण हैं

एक परीक्षण ऐसा दिख सकता है:

it('should fail to register a new user without the proper information', function(done) {
  api.post('/user')
  .send({})
  .expect(400)
  .expect('Content-Type', /json/)
  .end(function(err, res) {
    should.exist(res.body);
    should.exist(res.body.error);
    should.not.exist(err);
    res.body.error.should.contain('Username');
    res.body.error.should.contain('password');
    done();
  });
});

वास्तविक परीक्षण महान काम करता है, लेकिन अब मुझे इन परीक्षणों के कोड कवरेज को देखने में सक्षम होना चाहिए। मुझे यह जानना होगा कि मैं क्या पर्याप्त रूप से परीक्षण नहीं कर रहा हूं मैंने मोचा के परीक्षण कवरेज का प्रयोग करने की कोशिश की है:

mocha -R html-cov --coverage > coverage.html

और इस्तांबुल:

istanbul cover _mocha -- -R spec --timeout 5000

दोनों ही मुद्दे से पीड़ित हैं:

आप देखते हैं, यह एक उदाहरण मार्ग (उपयोगकर्ता पंजीकरण) है। मेरे परीक्षण निश्चित रूप से इसे कवर करते हैं, लेकिन जब से वे इस विधि को सीधे नहीं कहते हैं, तो कवरेज उपकरण यह मानते हैं कि इसे कभी भी नहीं कहा जाता है। यह समस्या है - कोड कवरेज उपकरण उस कोड को कैप्चर नहीं कर रहे हैं जो अंततः निष्पादित किया गया है।

मैंने एक और समाधान की कोशिश की - इस्तांबुल मिडलवेयर , जो वास्तव में जानकारी को बेहतर ढंग से पकड़ने लग रहा था (हालांकि यह हैकी था)। हालांकि यहां समान मार्ग दिखता है:

जो स्पष्ट रूप से वांछनीय भी नहीं है निश्चित रूप से इस समस्या में अन्य अनुप्रयोग चल रहे हैं, वे इसे करने के बारे में कैसे जाते हैं?

नोट: मैंने यह सब काम करने के लिए jscoverage को भी स्थापित किया है।

मैंने देखा स्रोत:
https://brianstoner.com/blog/testing-in-nodejs-with-mocha/
http://boycook.wordpress.com/2013/03/29/automated-javascript-testing-with-mocha-and-js-coverage-for-nodejs/
मोचा के साथ कोड कवरेज


मेरे पास यह एक ही सटीक स्थिति थी और मुझे पता चला कि जिस तरह से मैं सुपरस्टेस्ट का उपयोग कर रहा हूं उसे करना है:

  • इससे पहले कि मैं अपने चल सर्वर पर सीधे अपने ऐप का परीक्षण कर रहा था, इस तरह से

    var request = require('supertest')
    var api = request('http://127.0.0.1:3000')
  • मैं इसके बजाय मेरे व्यक्त ऐप की आवश्यकता के द्वारा इसे ठीक करता हूं :

    var request = require('supertest')
    var app = require('../../../')
    var api = request(app)