2015-06-09 23 views
13

के साथ जैस्मीन और ककड़ीजेएस का उपयोग कैसे करें मैं अपनी परियोजना का परीक्षण करने के लिए प्रोटैक्टर, ककड़ीजेएस और जैस्मीन का उपयोग करना चाहता हूं। मैं प्रोटैक्टर के साथ जैस्मीन और ककड़ीजेएस दोनों का उपयोग कैसे करूं?प्रोटैक्टर

/path/to/myproj/protractor.conf.js

exports.config = { 
    seleniumServerJar: 'node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar', 

    specs: [ 
    'features/*.feature' 
    ], 

    baseUrl: 'http://localhost:8080', 

    multiCapabilities: [ 
    { 
     'browserName': 'chrome' 
    } 
    ], 

    allScriptsTimeout: 380000, 
    getPageTimeout: 20000, 

    framework: 'cucumber', 

    cucumberOpts: { 
    require: 'features/stepDefinitions.js', 
    format: 'summary' 
    } 
}; 

आप देख सकते हैं, इस परियोजना ढांचे के रूप में "ककड़ी" का उपयोग करता है: यहाँ परियोजना सेटअप मेरे द्वारा बनाए गए है। मैं ककड़ीजेएस के साथ जैस्मीन ढांचे में कैसे जोड़ूं? क्या यह प्रोटैक्टर कॉन्फ़िगरेशन फ़ाइल या कोड में कहीं और होगा?

/path// myproj/सुविधाओं/demo.feature

Feature: Some terse yet descriptive text of what is desired 

    Scenario: Some determinable business situation 
    Given some precondition 

/path/to/myproj/सुविधाओं/stepDefinitions.js

module.exports = function() { 
    this.Given(/^some precondition$/, function (callback) { 
    expect(true).toEqual(true); 
    callback(); 
    }); 
}; 

जब ऐसा करने के लिए मार डाला जाता है , "उम्मीद" परिभाषित नहीं किया गया है, संभवतः क्योंकि जैस्मीन को एकीकृत नहीं किया गया है, और इसके साथ वैश्विक होने की उम्मीद है। यहाँ पूर्ण त्रुटि संदेश है:

$ $(npm bin)/protractor protractor.conf.js 
Starting selenium standalone server... 
[launcher] Running 1 instances of WebDriver 
Selenium standalone server started at http://192.168.1.115:59957/wd/hub 
(::) failed steps (::) 

ReferenceError: expect is not defined 
    at World.<anonymous> (/path/to/myproj/features/stepDefinitions.js:3:5) 
    at process._tickCallback (node.js:355:11) 


Failing scenarios: 
/path/to/myproj/features/demo.feature:3 # Scenario: Some determinable business situation 

1 scenario (1 failed) 
1 step (1 failed) 
Shutting down selenium standalone server. 
[launcher] 0 instance(s) of WebDriver still running 
[launcher] chrome #1 failed 1 test(s) 
[launcher] overall: 1 failed spec(s) 
[launcher] Process exited with error code 1 

/path/to/myproj/package.json

{ 
    "name": "myproj", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "cucumber": "0.4.9", 
    "protractor": "git+https://github.com/angular/protractor.git#0262268fa43b9eefac815d986740efa07bb15818" 
    } 
} 

नोट: मैं किसी खास अपने पैकेज में कोणमापक Git भंडार के लिए प्रतिबद्ध उपयोग कर रहा हूँ। जेसन, क्योंकि नवीनतम संस्करण (2.1.0) में a bug है, जो ककड़ीजेएस के साथ एकीकरण को रोकता है।

उत्तर

23

ककड़ीजेएस और जैस्मीन पारस्परिक रूप से अनन्य हैं; आप ककड़ी के चरणों में जैस्मीन की अपेक्षाओं का उपयोग करने में सक्षम नहीं होंगे। इसके बजाय आपको एक अलग उम्मीद मॉड्यूल लोड करना है। मैं chai-as-promised प्लगइन के साथ Chai का सुझाव दूंगा। (चाय के रूप में देने का वादा किया वादे के आसपास उम्मीदों लेखन की प्रक्रिया सरल करता है। कोणमापक जैस्मीन में expect() समारोह को ओवरराइड करता है पर्दे के पीछे आप के लिए यह करने के लिए) सबसे अधिक संभावना है कि आप अपने विश्व में ऐसा करना चाहते हैं के रूप में है कि प्रदान करने के लिए सबसे आसान तरीका है अपने चरण परिभाषाओं में इसका उपयोग करें। आपकी दुनिया कुछ इस तरह दिखेगा:

var World, chai, chaiAsPromised; 
chai = require('chai'); 
chaiAsPromised = require('chai-as-promised'); 

World = function World(callback) { 
    chai.use(chaiAsPromised); 
    this.expect = chai.expect; 
    callback(); 
} 

module.exports.World = World; 
फिर अपने कदम परिभाषाएँ में

फाइल तुम सिर्फ CucumberJS documentation प्रति विश्व में लोड और आप चरण परिभाषाएँ दुनिया के सभी गुण के लिए पहुँच प्रदान करने के लिए scoped हो जाएगा रहे हैं:

module.exports = function() { 

    this.World = require("path/to/world.js").World; 

    this.Given(/^some precondition$/, function (callback) { 
    this.expect(true).to.equal(true); 
    callback(); 
    }); 
}; 

अब, के लिए कुछ बेशर्म आत्म को बढ़ावा देने के: आप CucumberJS साथ चांदा का उपयोग कर रहे हैं, मैं एक मॉड्यूल को देखकर मैं CukeFarm बुलाया बनाने में मदद की सिफारिश करेंगे। यह कुछ मॉड्यूल के साथ पूर्व-कॉन्फ़िगर किया गया है जो आपको उपयोगी लगेगा और यह कई सामान्य चरण परिभाषाएं प्रदान करता है जिनका उपयोग अधिकांश किसी भी प्रोजेक्ट पर किया जा सकता है।

+0

मोचा एक परीक्षण ढांचे जो चाय सहित किसी भी उम्मीद मॉड्यूल, के उपयोग के लिए अनुमति देता है है। क्या यह एक कारण है कि मोचा यूनिट परीक्षण ढांचे के रूप में लोकप्रिय क्यों है, ताकि ककड़ी परीक्षण लिखने के लिए उपयोग की जाने वाली वही अपेक्षाओं का मॉड्यूल भी परीक्षण परीक्षण में आधारित एक अधिक संगत कोड बनाने के लिए यूनिट परीक्षण लिखने के लिए उपयोग किया जा सके?आपके उत्तर के लिए और CukeFarm सिफारिश के लिए धन्यवाद! –

+0

@AristarkhArtemiy हाँ, यह मोचा के लिए जाने का कारण बहुत अच्छा है। अपने यूनिट परीक्षणों और ककड़ी चरण परिभाषाओं में समान पैटर्न/वाक्यविन्यास (उदाहरण के लिए चाई के साथ) का उपयोग करना एक अच्छी बात है, खासकर यदि अन्य लोगों को कोडबेस में कूदना है। – jbpros

+0

क्या आप कारणों से विस्तार कर सकते हैं कि ककड़ीजेएस और जैस्मीन परस्पर अनन्य क्यों हैं? मैं ई 2 ई परीक्षण चलाने के लिए प्रोटैक्टर में ककड़ीजे को एकीकृत करने की कोशिश कर रहा हूं। अगर मैं यह काम कर सकता हूं तो यह बहुत अच्छा होगा। स्टैक मैं उपयोग कर रहा हूँ: कोणीय 2, वेबपैक, .. –

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