2013-05-31 5 views
1

Je suis nouveau pour les tests et j'ai du mal à comprendre pourquoi mon test ne fonctionne pas. Voici mon fichier fonctionnalité appelée child_user_selected_categories.featureTest de concombre ne fonctionne pas

@no-database-cleaner 
Feature: Managing selected_categories 
    In order to use portal 
    I want to create selected_categories for child user 


    Scenario: Creating a child selected_categories for a child user 
    Given the database contains no test data 
    And an user and sub user exists 
    Given I am on the homepage 

    When I attempt to sign in with following user account: 
     | email address   | password | 
     | [email protected] | password | 

    Then I should see "[email protected]" message on page 
    When I follow "All Child Users" 
    And I view "Child Categories" for sub user "[email protected]" 
    Then I should see "Default Filter Level for User [email protected] is" 
    When I press "APPLY" 
    Then I should see "Custom Filter Created for [email protected]" 

J'utilise factory_girl pour enregistrer des Inser. Voici mon fichier de définition de l'étape appelée child_user_selected_categories.rb

And /^I view "([^"]*)" for sub user "([^"]*)"$/ do |link, user| 
    selector = find('tr', text: user) 
    within selector do 
    click_link(link) 
    end 
end 

Given(/^an user and sub user exists$/) do 
    parent = FactoryGirl.create(:user) 
    user = FactoryGirl.create(:user, email: "[email protected]", parent_id: parent.id, default_filter_level: parent.default_filter_level) 
    account = FactoryGirl.create(:account, user_id: parent.id) 
    FactoryGirl.create(:filter, user_id: user.id, account_id: account.id) 
    FactoryGirl.create(:filter, user_id: parent.id, account_id: account.id) 
end 

Filed appelé user.rb sous des traits/support a le code pour overrite certains champs utilisateur require 'factory_girl_rails'

FactoryGirl.define do 
    factory :user do |u| 
    u.email '[email protected]' 
    u.password 'password' 
    u.src_ip_addr 'hostname -I' 
    u.ar_id true 
    u.default_filter_level 'Medium' 
    u.src_netmask '255.255.255.0' 
    end 
end 

APPLIQUENT bouton soumettre à l'aide jquery post

//on sibmit this will create a records for user for selected categories 
     $("#selectes_categories").submit(function(){ 

      // get alll the selected category ids in list box 2 
      var options = $("select#lstBox2").children().map(function() {return $(this).val();}).get(); 

      //var values = $('#categories_ids_').val() 
      $('#selected_category_ids').val(options); 
      $.post($(this).attr("action"),$(this).serialize(),function(response){ 
       $("#flash_notice").html(response); 
      }); 
      return false; 
     }); 

<%= form_tag "/levels/create_user_selected_categories", :id=> "selectes_categories" do %> 
    <%= hidden_field_tag 'selected_category_ids' %> 
    <%= hidden_field_tag 'user_id',@user.id %> 
    <%= submit_tag "APPLY",:class => 'btn btn-primary'%> 
<% end %> 

Sur soumettre mon code faire son travail. Mais quand il ne fonctionne pas en utilisant du concombre quand je dis appuyer sur APPLIQUER. J'ai écrit un test pour presque le même scénario et ils fonctionnent très bien mais seule la différence est ici J'utilise jquery post pour aller au contrôleur et créer des disques. Voici le code du contrôleur

def create_user_selected_categories 
    @user = User.find(params[:user_id]) if params[:user_id] != nil 
    if @user != nil 
     UserSelectedCategory.where(:user_id => @user.id).destroy_all 
     @selected_user_categories = params[:selected_category_ids] 
     @selected_user_categories.split(",").each{|catg_id| 
     UserSelectedCategory.create(:user_id => @user.id, :category_id => catg_id.to_i) 
     } 
     @total_category_masks_for_user = Category.sum(:category_mask, :conditions => {:id => @user.user_selected_categories.map{|catg| catg.category_id}}) 

     @user_filter = Filter.find_by_user_id(@user.id) 
     if @user_filter == nil 
     Filter.create(:category_mask => @total_category_masks_for_user, :account_id => @user.account.id, :user_id => @user.id) 
     else 
     @user_filter.category_mask = @total_category_masks_for_user 
     @user_filter.save 
     end 

    end 
    render :action => 'create_user_selected_categories', :layout => false 
    end 

Des suggestions? Merci

Répondre

1

En supposant que vous utilisez Capybara avec du concombre, votre Javascript ne sera pas exécuté par défaut. Une solution très simple pourrait consister à ajouter la balise @javascript à votre scénario:

@javascript 
Scenario: Creating a child selected_categories for a child user 
... 

Ce que cela va faire est de lancer votre scénario en utilisant le pilote Selenium, ce qui en fait ouvrir une fenêtre de navigateur et tester votre application en tant que utilisateur réel pourrait, qui comprendra l'exécution de Javascript. Il va essayer d'utiliser Firefox par défaut, alors assurez-vous d'avoir installé cela.

Plus: https://github.com/jnicklas/capybara#using-capybara-with-cucumber

+0

J'ai ajouté @javascript et maintenant sa 'dire Lorsque je tente de vous connecter avec suivant compte utilisateur: # Caractéristiques/step_definitions/user_steps.rb: 65 | adresse email | mot de passe | | [email protected] | mot de passe | Impossible de trouver le champ "email" (Capybara :: ElementNotFound) 'Voici le code user_steps.rb' Given/^ J'essaie de me connecter avec email "(. *?)", Mot de passe "(. *?)" $/faire | email, mot de passe | login (email, mot de passe) end' 'def login (email, mot de passe) fill_in ('user_email',: avec => email) fill_in ('user_password',: avec => mot de passe) click_button ('login' end' – user588324

+1

Il semble que votre test essaie d'exécuter l'étape de connexion, mais le navigateur n'est pas sur la bonne page. Vous devriez être capable de regarder le navigateur et de voir à quelles pages il navigue pour s'assurer qu'il est correct. Vous pouvez également mettre 'save_and_open_page' à la fin de l'étape« Étant donné que je suis sur la page d'accueil », ce qui ouvrira un« instantané »de la page à laquelle votre test a navigué. –

Questions connexes