2016-03-16 2 views
2

У меня есть некоторые проблемы, когда я пишу функциональный тест с огурцом + транспортир в угловом2.
Это мой кодНапишите функциональный тест с огурцом + транспортир + угловой2

cucumberCong.js

exports.config = { 
    seleniumAddress: 'http://localhost:4444/wd/hub', 

    seleniumServerJar: '../node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar', 

    framework: 'custom', 

    frameworkPath: '../node_modules/protractor-cucumber-framework/index.js', 

    // Spec patterns are relative to this directory. 
    specs: [ 
     'spec/**/*.feature' 
    ], 

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

    baseUrl: 'http://' + (process.env.HTTP_HOST || 'localhost') + ':' + (process.env.HTTP_PORT || webServerDefaultPort), 

    cucumberOpts: { 
     require: 'spec/**/*.js', 
     tags: '@dev', 
     format: undefined, 
     profile: false, 
     'no-source': true 
    } 
}; 

login.feature

Feature: Login 

    @dev 
    Scenario: Login funtion 
    Given go login page "http://localhost:8080/#/login" 
    Then input userName "username", password "password" 
    Then click login 
    Then see About page "http://localhost:8080/#/home" 

loginSpec.ts

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 

var HttpBackend = require('http-backend-proxy'); 
var proxy = new HttpBackend(browser); 


module.exports = function loginPage() { 
    var expect = chai.expect; 

    this.setDefaultTimeout(500 * 1000); 

    this.Given(/^go login page "([^"]*)"$/, function (url, next) { 
     browser.driver.get(url); 
     next(); 
    }); 

    this.Then(/^input userName "([^"]*)", password "([^"]*)"$/, function (userName, password, next) { 
     browser.driver.findElement(by.id('userName')).sendKeys(userName); 
     browser.driver.findElement(by.id('pass')).sendKeys(password); 
     next(); 
    }); 

    this.Then(/^click login$/, function (next) { 
     proxy.whenGET('http://localhost:3000/login').respond(function(method, url) { 
      return [200, {"data": "test"}]; 
     }); 
     browser.driver.findElement(by.id('login')).click(); 
     next(); 
    }); 

    this.Then(/^see About page "([^"]*)"$/, function (url, next) { 
     expect(browser.getLocationAbsUrl()).to.equal(url); 
     next(); 
    }); 
}; 

Моя проблема являются:
1. Когда-то имя_пользователя и пароль не могут вводиться в элемент, но разрешение по-прежнему - это пропуск. Я не знаю почему.
2. Я хочу использовать 'http-backend-proxy' для моделирования данных без отправки запроса на сервер, но это не работает, ошибка angular is not defined. Как имитировать данные при отправке запроса?

Пожалуйста, помогите мне, спасибо.

+0

вы нашли какую-либо разрешение для этого? пожалуйста, обновите свой вопрос с ответом. –

ответ

1

относительно 1)

this.Then(/^input userName "([^"]*)", password "([^"]*)"$/, function (userName, password, next) { 
    browser.driver.findElement(by.id('userName')).sendKeys(userName); 
    browser.driver.findElement(by.id('pass')).sendKeys(password); 
    next(); 
}); 

транспортира асинхронный. ваше использование обратного вызова

next() 

осуществляется непосредственно после того, как часть

browser.driver.findElement(by.id('userName')) 

поэтому асинхронная часть в ранее заявления иногда достаточно быстро, иногда позже.

sendKeys(userName); 

Это приводит к тому, что этот шаг функции будет зеленым, без контроля, если транспортир был выполнен правильно.

вы также не используете chai ожидание.

Предложение 1.1: не использовать следующий обратный вызов, цепной асинхронный обещают:

this.Then(/^input userName "([^"]*)", password "([^"]*)"$/, 
function (userName, password) { 
    return browser.driver.findElement(by.id('userName')) 
     .sendKeys(userName) 
    .then(function(){ 
     return browser.driver.findElement(by.id('pass')) 
      .sendKeys(password); 
    }  
}); 

функция внешней «this.then» использует результат посыла цепи как точки выхода, заменяя следующий (обратный вызов) оставьте шаг.

Предложения 1.2: использование для Chai ожидать (также асинхронную с chaiAsPromised)

this.Then(/^go to some url$/, function() { 
    var targetUrl = "http://example.com"; 
    browser.get(targetUrl); 
    expect(browser.getCurrentUrl()).to.eventually.equal(targetUrl); 
}); 

относительно 2), вашего ответа должен содержать нг-приложения тегов в теле, см Uncaught ReferenceError: angular is not defined - AngularJS not working

Смежные вопросы