2013-10-19 23 views
11

मैं अपने कोणीय अनुप्रयोग के लिए प्रोटैक्टर का उपयोग कर एक एंड-टू-एंड टेस्ट लिख रहा हूं। मैं यूनिट टेस्ट के लिए httpBackend का नकल कर सकता हूं लेकिन मैं वास्तव में सर्वर को कॉल करना चाहता हूं और जेएसओएन प्रतिक्रिया वापस प्राप्त करना चाहता हूं और परीक्षण डेटा फिर से लिखना चाहता हूं।
मैंने स्टैक ओवरफ्लो पर बहुत कुछ पढ़ा है लेकिन यह नहीं समझा जा सकता कि यह कैसे किया जाता है।कोणीय प्रोटैक्टर e2e परीक्षण

क्या मैं $ http का उपयोग करता हूं? मैं इसे अपने जैस्मीन परीक्षणों में कैसे इंजेक्ट कर सकता हूं? मैं अपने जैस्मीन परीक्षण में जेएसओएन प्रतिक्रिया कैसे प्राप्त करूं?

ऐसा करने के निर्देशों के साथ संसाधनों के लिए कोई मदद या लिंक उपयोगी होगा।

फिर मैं सर्वर पर नकल नहीं करना चाहता, मैं सर्वर को हिट करना चाहता हूं और जेएसओएन वापस लेना चाहता हूं।

धन्यवाद!

उत्तर

3

प्रोटैक्टर का उपयोग आपके पूर्ण ढेर के अंत-से-अंत परीक्षण के लिए किया जाना चाहिए।

इस परिदृश्य में परीक्षण आम तौर पर कोणीय अनुप्रयोग (फॉर्म भरना, बटन दबाकर) का उपयोग करता है जो आरईएसटी सर्वर पर कॉल करने के लिए कोणीय अनुप्रयोग को ट्रिगर करेगा, जो डेटा लौटाता है, जो आपका कोणीय अनुप्रयोग डीओएम परिवर्तनों में बदल जाता है, जो तब आपका अंत तक परीक्षण परीक्षण पर जोर देता है।

इसका मतलब है कि आप शायद कोणमापक

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

इसमें कठिनाई आम तौर पर आपके डेटाबेस को कैसे सेट अप करें, ताकि e2e परीक्षण जानता है कि आपकी JSON सेवाओं पर रिटर्न के रूप में क्या अपेक्षा की जानी चाहिए।

5

मैं इस समय अपने आप से काम कर रहा हूं। मुझे लगता है कि संक्षिप्त जवाब यह है कि आप अपना आवेदन बिल्कुल वैसे ही स्थापित करते हैं जैसे कि आप इसे स्वयं मैन्युअल रूप से जांच रहे थे - इसलिए प्रोटैक्टर वास्तव में केवल एक रोबोट उपयोगकर्ता है, इसमें आपके आवेदन के आंतरिक भाग में कोई (अच्छी तरह से, लगभग नहीं) पहुंच है।

इसलिए, यदि आपके एप्लिकेशन को एक वेब सर्वर (और अधिकतर) की आवश्यकता है, तो आप उस वेब सर्वर को शुरू करते हैं, फिर प्रोटैक्टर ब्राउज़र के माध्यम से अपने एप्लिकेशन से कनेक्ट होता है और इसका अभ्यास करता है।

मेरे मामले में, मैं अपने प्रोटैक्टर ई 2 टे परीक्षणों को चलाने से पहले मूल डेटाबेस सेटअप करने वाले कार्य को कॉल करने के लिए गंदगी का उपयोग करना चाहता हूं - इससे मुझे एक ज्ञात डेटाबेस स्थिति मिलनी चाहिए।

इस का एक उदाहरण के लिए, मैं AngularJS साथ रेल 4 उपयोग करने के लिए एक ट्यूटोरियल लिख रहा हूँ, E2E परीक्षण के लिए चांदा का उपयोग कर पर अनुभाग रेल-विशिष्ट नहीं है और उपयोगी हो सकता है: http://technpol.wordpress.com/2013/11/16/5-end-to-end-testing/

0

नीचे है e2e परीक्षण चलाने के दौरान केवल एक अलग नोड सर्वर को स्वचालित रूप से प्रारंभ और बंद करने का एक उदाहरण। एक साधारण एक्सप्रेस मॉक सर्वर स्क्रिप्ट को एक उदाहरण एपीआई के रूप में शामिल किया गया है।

protractor.conf.js

const {SpecReporter} = require('jasmine-spec-reporter'); 
const forever = require('forever-monitor'); 

const child = new (forever.Monitor)('index.js', { 
    max: 10, 
    silent: false, 
    args: ["--port", "3001"], 
    sourceDir: 'mock-server' 
}); 

let startResolve; 
let stopResolve; 
const startPromise = new Promise((resolve) => startResolve = resolve); 
const stopPromise = new Promise((resolve) => stopResolve = resolve); 

child.on('start', function() { 
    console.info('Forever started mocks.'); 
    startResolve(); 
}); 

child.on('restart', function() { 
    console.info('Forever restarting mocks for ' + child.times + ' time'); 
}); 

child.on('exit:code', function (code) { 
    if (code) { 
    console.info('Forever exit mocks with code ' + code); 
    } else { 
    console.info('Forever exited mocks.'); 
    } 
    stopResolve(); 
}); 

exports.config = { 
    allScriptsTimeout: 11000, 
    specs: [ 
    './e2e/**/*.e2e-spec.ts' 
    ], 
    capabilities: { 
    'browserName': 'chrome' 
    }, 
    directConnect: true, 
    baseUrl: 'http://localhost:4200/', 
    framework: 'jasmine', 
    jasmineNodeOpts: { 
    showColors: true, 
    defaultTimeoutInterval: 30000, 
    print: function() { 
    } 
    }, 
    beforeLaunch: function() { 
    child.start(); 

    require('ts-node').register({ 
     project: 'e2e/tsconfig.e2e.json' 
    }); 

    return startPromise; 
    }, 
    onPrepare() { 
    jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: true}})); 
    }, 
    onCleanUp() { 
    child.stop(); 

    return stopPromise; 
    } 
}; 

नकली सर्वर/सूचकांक।js

// npm install --save express 
// npm install --save body-parser 
// npm install --save minimist 

const express = require('express'); 
const bodyParser = require('body-parser'); 
const minimist = require('minimist'); 

const API_DELAY = 0; 
const app = express(); 
app.use(bodyParser.json({limit: '50mb'})); 

// Turn on CORS for browser testing. 
app.use(function (req, res, next) { 
    let accessHeaderInReq = false; 
    if (req.headers.origin) { 
    res.header('Access-Control-Allow-Origin', req.headers.origin); 
    accessHeaderInReq = true; 
    } 
    if (req.headers['access-control-request-method']) { 
    res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']); 
    accessHeaderInReq = true; 
    } 
    if (req.headers['access-control-request-headers']) { 
    res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']); 
    accessHeaderInReq = true; 
    } 
    if (accessHeaderInReq) { 
    res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365); 
    } 

    // Intercept OPTIONS method for angular preflight checks. 
    if (accessHeaderInReq && req.method === 'OPTIONS') { 
    return res.sendStatus(200); 
    } 
    else { 
    next(); 
    } 
}); 

app.get('/api/foo', function (req, res, next) { 
    console.info('GET - returning foo', req.body); 
    setTimeout(() => { 
    res.json({ 
     foo: "bar" 
    }); 
    }, API_DELAY); 
}); 

const argv = minimist(process.argv.slice(2)); 
const port = argv.port || 3000; 
console.log("Starting express on port", port); 
app.listen(port); 

निरंतर एकीकरण वातावरण के लिए, आप इस तरह निर्देशिकाओं को बदले बिना नकली सर्वर node_modules स्थापित कर सकते हैं:

npm --prefix ./mock-server install ./mock-server 
संबंधित मुद्दे