2015-11-24 10 views
5

के साथ नकली HTTP का उपयोग करें मैं जैस्मीन और प्रोटैक्टर के साथ नकली HTTP का उपयोग कैसे कर सकता हूं?प्रोटैक्टर और जैस्मीन

मेरे test.spec.js में, मैंने एक नकली घोषित की, लेकिन यह नकली काम नहीं करता है। मुझे कोई त्रुटि नहीं है। मेरा एपी हमेशा जवाब देता है और नकली नहीं।

मैं कभी भी 'mockModule' नहीं देखता! मेरे कंसोल में। समारोह मेरे निष्पादित किया जाता है कभी नहीं:

browser.addMockModule('modName', function() { 

    browser.executeScript(function() {console.log('mockModule!')}); 

    angular.module('modName', []).value('foo', 'bar').run(function ($httpBackend) { 
    $httpBackend.whenPOST('http://api.webapp.net/app_dev.php/module/search?direction=asc&page=1').respond('repsond'); 

    browser.executeScript(function() {console.log('enter mockModule!')}); 
    }); 
}); 

मेरी app.js में मैं "ngMock" नहीं है।

मैं अपने index.html में यह कहा:

gulp.task('protractor-local', shell.task([ 
     'protractor protractor.conf.js --baseUrl="http://mywebapp.local.net"' 
])); 

सभी परीक्षणों ठीक हैं, लेकिन नहीं:

node_modules/angular-mocks/angular-mocks.js 

मैं 'घूंट चांदा-स्थानीय' के साथ कमांड प्रॉम्प्ट से परीक्षण चलाने नकली

test.spec.js

var loginPO = new(require('./models/login.model.js'))(); 

describe("hello", function() { 

    it("I click on the button-search button", function() { 

     loginPO.wait(10); 

     //browser.ignoreSynchronization = false; 

     browser.addMockModule('modName', function() { 

      browser.executeScript(function() {console.log('mockModule!')}); 

      angular.module('modName', []).value('foo', 'bar').run(function ($httpBackend) { 
       $httpBackend.whenPOST('http://api.webapp.net/app_dev.php/module/search?direction=asc&page=1').respond('repsond'); 

       browser.executeScript(function() {console.log('enter mockModule!')}); 
      }); 
     }); 

     //browser.getRegisteredMockModules(); 

     loginPO.clickButtonSearchButton(); 
     loginPO.wait(10); 
    }); 

    it("I am on the home page", function() { 
     loginPO.visit('#/'); 
    }); 

    ... 

}); 

मॉडल/login.model.js

'use strict'; 

var _ = require('lodash'); 

var LoginPageObject = function() { 

    var signInButton = element(by.id('signIn')); 

    _.mixin(this, require('./common/base.js').Base); 

    this.path = '#/'; 

    this.clickButtonSearchButton = function() { 
     return browser.driver.findElement(by.id('button-search')).click(); 
    }; 

    ... 

}; 

module.exports = LoginPageObject; 

आम/base.js

function visit(path, params) { 
    return browser.get(this.path + (params || '')); 
} 

function wait(params) { 
    params = params * 1000; 
    return browser.sleep(params); 
} 
... 

exports.Base = { 
    visit: visit, 
    wait: wait, 
    ... 
}; 

protractor.config.js

exports.config = { 
    directConnect: true, 

    seleniumServerJar: 'node_modules/selenium-server/lib/runner/selenium-server-standalone-2.48.2.jar', 

    specs: [ 
    'jasmine/*.spec.js' 
    ], 

    getPageTimeout: 30000, 

    capabilities: { 
    'browserName': 'chrome', 
    version: '', 
    platform: 'ANY' 
    }, 

    framework: 'jasmine2' 

}; 

** karma.conf.js **

// Karma configuration 

module.exports = function(config) { 

    var configuration = { 

     basePath: './', 

     frameworks: [ 
      'jasmine-jquery', 
      'jasmine', 
      'jasmine-matchers' 
     ], 

     files: [ 
      ... 
      'assets/libs/angularjs/angular.min.js', 
      'node_modules/angular-mocks/angular-mocks.js', 
      ... 
      'assets/libs/angularjs/sweetalert.min.js', 
      'assets/libs/angularjs/ui-bootstrap-tpls.min.js', 
      'app/app.js', 
      'app/*/*.js', 
      'app/*/*/*.js', 
      'app/*/*/*/*.js', 
      { 
       pattern: 'app/*/*/*/*/*.json', 
       included: false 
      } 
     ], 

     exclude: [], 

     preprocessors: { 
      'app/**/!(*.test).js': ['coverage'] 
     }, 

     coverageReporter: { 
      type: 'text', 
      dir: 'coverage/' 
     }, 

     reporters: ['spec'], 

     port: 8080, 

     colors: true, 

     logLevel: config.LOG_INFO, 

     autoWatch: false, 

     browsers: ['PhantomJS'], 

     singleRun: true, 

     customLaunchers: { 
      'PhantomJS_custom': { 
       base: 'PhantomJS', 
        options: { 
         windowName: 'my-window', 
         settings: { 
         webSecurityEnabled: false 
        } 
       }, 
       flags: ['--load-images=true'], 
       debug: true 
      } 
     }, 

     phantomjsLauncher: { 
      exitOnResourceError: true 
     } 
    }; 

    config.set(configuration); 
}; 

package.json

{ 
    "name": "webapp", 
    "version": "1.0.0", 
    "description": "webapp", 
    "dependencies": { 
    "angular-mocks": "^1.4.5", 
    "chromedriver": "^2.19.0", 
    "gulp-protractor": "^1.0.0", 
    "gulp-shell": "^0.5.0", 
    ... 
    "protractor": "^2.5.1", 
    "selenium-server": "^2.48.2", 
    "selenium-standalone": "^4.7.0", 
    "selenium-webdriver": "^2.48.0", 
    } 
} 
+0

आप ब्राउज़र या कमांड प्रॉम्प्ट से चल रहे हैं? चांदा protractor.conf.js --baseurl = "http://mywebapp.local.net" –

+0

मैं साथ कमांड प्रॉम्प्ट से परीक्षण चलाने । –

+0

भी हिस्सा कर्म कॉन्फ़िग फ़ाइल –

उत्तर

1

मैं भी यही समस्या थी, और मैं यह सब mocks

angular.module('mockBackend', ['myAppModule', 'ngMockE2E']).run(function ($httpBackend) { 
    $httpBackend.when('GET', /user/).respond(200, {login: 'user_test'}); 
    }); 

और निर्देश इंडेक्स फ़ाइल में mockBackend मॉड्यूल के लिए डेटा-एनजी-ऐप्लिकेशन बदलने के साथ एक आवरण मॉड्यूल बनाने का संकल्प

<html data-ng-app='mockBackend'> 

आप इस मॉड्यूल को शामिल करने के लिए एक गल्प/ग्रंट कार्य कॉन्फ़िगर कर सकते हैं और अपने परीक्षण चलाने से पहले डेटा-एनजी-एप बदल सकते हैं।

इस लिंक आप एक पूरा उदाहरण देख सकते हैं: http://blog.xebia.com/angularjs-e2e-testing-using-ngmocke2e/

+0

अच्छा विचार! क्या आपने httpbackend में जवाब में जेएसएस फ़ाइल लोड की है? –

+0

मैंने नहीं किया है, लेकिन यह बहुत ही सुरुचिपूर्ण लगता है! –

+0

httpbackend से JSON फ़ाइल लोड करने के लिए, यह इसके साथ काम करता है: http://stackoverflow.com/a/24287558/5453732 –

0

पहली बात आप मिश्रण कर रहे हैं E2E परीक्षण और चमेली इकाई परीक्षण। प्रोटैक्टर का उपयोग कर ई 2 ई परीक्षण के लिए।

यह भी सुनिश्चित करें कि आपने जैस्मीन यूनिट परीक्षण के लिए कर्म कॉन्फ़िगरेशन में अपना परीक्षण फ़ाइल पथ शामिल किया है।

सुनिश्चित करें कि Selenium webdriver-manager uptodate

उदा है

लॉगिन पृष्ठ के लिए स्निपेट एचटीएमएल।

<div class="form-group" 
      ng-class=" {'has-error' :!loginForm.userEmail.$pristine && loginForm.userEmail.$invalid}" > 
      <label for="email">Enter Email</label> 
      <input type="email" name="userEmail" class="form-control" required placeholder="Enter Email" ng-model="objUser.userEmail">   
      <div ng-show="loginForm.userEmail.$touched || loginForm.$submitted"> 
       <span ng-show="loginForm.userEmail.$error.required">Please enter valid email</span> 
       <span ng-show="loginForm.userEmail.$error.email">Please enter valid email</span> 
      </div> 
     </div> 

कोणमापक js इस एचटीएमएल

describe("check user creation form integration", function() { 

    var ptor,userEmail,userPassword; 
    beforeEach(function(){ 
     ptor = protractor.ExpectedConditions; 
     userEmail  = element(by.model("objUser.userEmail")); 
    }); 

    it("\n\n1 . check login functionality",function(){ 

     browser.get("/#/"); 
     userEmail.sendKeys("*^*"); 
     expect(userEmail.getAttribute("class")).toContain('ng-invalid'); 
     userEmail.clear(); 
     browser.sleep(2000); 
     userEmail.sendKeys("HJJHJH"); 
     expect(userEmail.getAttribute("class")).toContain('ng-valid'); 
    }) 
}); 

चांदा config

जोड़ने के लिए लाइन

निम्नलिखित
exports.config = { 
    baseUrl: 'http://localhost:3000/' 
}; 

बंदरगाह अपने config के अनुसार बदलाव किया जाएगा।

+0

निष्पादित नहीं करता है। मैं अपने यूनिट परीक्षण चलाने के लिए कर्म + चमेली का उपयोग करता हूं ("कर्म शुरूआत" के साथ, और मैं अंत में परीक्षणों के अंत में चलाने के लिए प्रोटैक्टर + चमेली का उपयोग करता हूं ("protractor protractor.conf.js --baseUrl =" mywebapp.local.net " ")। मेरे लिए कर्म और प्रोटैक्टर के बीच कोई पुल नहीं है। –

+0

प्रोटैक्टर ई 2 ई परीक्षण के लिए कर्म चलाने की कोई आवश्यकता नहीं है। आप प्रोटैक्टर कमांड –

+0

द्वारा चला सकते हैं हाँ मुझे पता है, मैं प्रोटैक्टर के साथ कर्म नहीं चलाता, केवल प्रोटैक्टर –

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