2016-01-26 5 views
11

Google groups post on deprecating loopback-testing पर एक प्रश्न है जो लूपबैक-परीक्षण के बिना परीक्षण कैसे प्राप्त किया जा सकता है इसका उचित उदाहरण प्रदान करने के बारे में पूछता है। उस थ्रेड के बजाय supertest का उपयोग करने के बारे में बात करता है।सुपरटेस्ट, मोचा और मॉडल के साथ लूपबैक परीक्षण

नीचे एक प्रयास है जिसे मैंने मोचा को गठबंधन करने के लिए बनाया है, मॉडल के साथ सुपरटेस्ट (from app.js)। जब मैं स्वयं फ़ाइल चलाता हूं तो परिणाम वास्तव में अच्छा काम करता है। लेकिन अगर मेरे पास एक और टेस्ट फ़ाइल थी (test-teacher.js कहें) तो पहली टेस्ट फ़ाइल (इसे test-student.js कहते हैं) अजीब तरीके से विफल होने लगती है जिसका मैं वर्णन नहीं कर सकता।

क्या मुझे कुछ याद आ रहा है या मॉडल का उपयोग नहीं किया जा सकता है जैसे कि मैं उन्हें नीचे उपयोग कर रहा हूं?

describe('/Student', function() { 

    var server = require('../server/server') 
    var loopback = require('loopback') 
    var supertest = require('supertest') 
    var request = require('supertest')(server) 

    var dataSource = server.dataSource('db', {adapter: 'memory'}) 

    var Student = dataSource.define('Student', { 
     'id': Number, 
     'points': Number 
    }); 

    beforeEach(function() { 
     Student.updateOrCreate({id: 1, points: 5000}); 
    }) 


    it('Post a new student', function (done) { 
     request.post('/api/Students').send({points: 5000}).expect(200, done) 

    }) 


}) 
+1

आपको 'डेटासोर्स' चर कहां से मिल रहा है? किसी भी मामले में, एक ही परीक्षण में कई फाइलें सभी शेयर मेमोरी चलाती हैं, जिसका अर्थ है कि आप इन-मेमोरी मॉडल परिभाषाओं और डेटा को भी साझा करते हैं। मेरा अनुमान है कि आप कहीं भी अपने एलबी ऐप को शुरू करते हैं, हां? आपको इसे बंद करना सुनिश्चित करना होगा, लेकिन डेटा अभी भी जारी रह सकता है। यह मेरा अनुमान होगा। – jakerella

+0

उत्कृष्ट पकड़। कट और पेस्ट त्रुटि। 'डेटा स्रोत 'घोषणा जोड़ा गया। एलबी ऐप शुरू करने के लिए डब्लूआरटी, मैं इसे स्पष्ट रूप से नहीं करता हूं। उपर्युक्त कोड 'मोचा परीक्षण/test-student.js' के साथ चलाया जा सकता है। और फिर मैं 'मोचा टेस्ट' के साथ सभी परीक्षण चला सकता हूं। सर्वर के साथ अनुरोध को परिभाषित करके, यह एलबी कहते हैं। – user465342

+0

तो ... यह पता चला है कि दूसरी फ़ाइल में test-teacher.js मैंने 'छात्र' भी परिभाषित किया है। जब मैं टेस्ट-टीचर में 'छात्र' को टिप्पणी करता हूं तो ऊपर दिए गए परीक्षण काम करता है। फिर स्पष्ट रूप से test-teacher.js में परीक्षण विफल रहता है क्योंकि यह अब 'छात्र' के बारे में नहीं है। – user465342

उत्तर

15

पिछले जवाब पर jakerella से मिली प्रतिक्रिया के आधार पर, मैं कोड के साथ ऊपर कोड बदल इतना है कि मैं कोड में मॉडल खरोंच से फिर से परिभाषित करने की जरूरत नहीं है (धन्यवाद jakerella!)

नीचे, मैं बिना किसी असफलता के npm test का उपयोग कर एक ही सूट के रूप में कई अलग-अलग मॉडलों से सभी परीक्षणों को चलाने में सक्षम हूं।

चूंकि मुझे केवल व्यक्तिगत आदेशों में दिलचस्पी है ... सुनो और बंद आवश्यक नहीं थे। मुझे संदेह है कि अगर मैं मॉडल के समग्र उदाहरणों का परीक्षण कर रहा था जो बनाए गए थे तो यह आवश्यक हो जाएगा।

describe('/Student', function() { 

    var server = require('../server/server') 
    var request = require('supertest')(server) 
    var expect = require('expect.js') 

    var Student 

    before(function() { 
     Student = server.models.Student  
    }) 

    beforeEach(function (done) { 
     Student.upsert({id: 1, points: 5000}, function() { done() }) 
    })  

    it('Post a new student', function (done) { 
     request.post('/api/Students').send({points: 5000}).expect(200, done) 
    }) 
}) 
+2

कुछ टाइपों के अलावा जो मैंने अभी तय किया है, यह वास्तव में बहुत उपयोगी है। खासकर 'var request = की आवश्यकता है ('supertest') (सर्वर) 'ताकि परीक्षण में आप केवल request.post ('/api/students ') कर सकें। –

8

एक जवाब में इस टॉस करने तलाश है ... पहला मुद्दा एक अपरिभाषित dataSource वर था, लेकिन फिर आप भी अपने दो परीक्षणों में Student नए सिरे से परिभाषित किया था। इसके बजाय मेरी सिफारिश लूपबैक ऐप और मॉडलों को पहले से परिभाषित किया गया है (आमतौर पर common/models/ में)। फिर परीक्षण के लिए मूल कार्यान्वयन (जो मैं उपयोग करता हूं) नीचे दिए गए कोड की तरह कुछ है (mocha और chai का उपयोग करके)। सर्वर को शुरू और बंद करने के लिए beforeEach और afterEach पर ध्यान दें।

var assert = require('chai').assert, 
    superagent = require('superagent'), 
    app = require('../server/server'); 

describe('Person model', function() { 
    var server; 

    beforeEach(function(done) { 
    server = app.listen(done); 
    }); 

    afterEach(function(done) { 
    server.close(done); 
    }); 

    it('should log in and log out with live server', function(done) { 
    superagent 
     .post('http://localhost:3000/api/People/login') 
     .send({ email: '[email protected]', password: 'foobar' }) 
     .set('Accept', 'application/json') 
     .set('Content-Type', 'application/json') 
     .end(function(err, loginRes) { 
     if (err) { return done(err); } 

      assert.equal(loginRes.status, 200); 
      assert.ok(loginRes.body); 
      assert.equal(loginRes.body.userId, 1); 
     } 
     }); 
    }); 
}); 
+0

कृपया 'सामान्य/मॉडल /' में पहले से परिभाषित मॉडल का उपयोग करने का उदाहरण कोड प्रदान करें। – user465342

+1

वह * उदाहरण कोड है ...? यदि आपके लूपबैक सर्वर में मॉडल हैं, तो वे 'server.js' फ़ाइल के माध्यम से आ जाएंगे! मॉडलों को परिभाषित करने के लिए [डॉक्स साइट] (https://docs.strongloop.com/display/public/LB/Defining+models) को देखने का प्रयास करें। – jakerella

+0

मैं 'Student.updateOrCreate' का संदर्भ देता हूं जिसका अर्थ है कि 'छात्र' का संदर्भ होना आवश्यक है। नतीजतन, क्या मुझे परीक्षा में 'छात्र' घोषित करने की आवश्यकता नहीं है? कुछ 'var Student = 'कुछ की तरह कुछ? – user465342

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