2013-05-31 66 views
1

我是新来测试,我很难找出为什么我的测试不工作。这里是我的功能文件叫做child_user_selected_categories.feature黄瓜测试不起作用

@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]" 

我使用factory_girl来录入记录。这里是我的步骤定义文件名为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 

一篇名为下功能user.rb /支持有代码overrite一些用户领域 需要“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 

申请通过提交按钮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 %> 

关于提交我的代码的工作。但是当我说按APPLY时,它不在使用黄瓜。我已经写了几乎相同的情况测试,他们工作得很好,但唯一的区别是在这里我使用jQuery帖子去控制器和创建记录。这里是控制器代码

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 

有什么建议吗?谢谢

回答

1

假设你在黄瓜使用水豚,你的Javascript将不会被默认执行。一个非常简单的解决方案可能是将@javascript标记添加到您的方案:

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

这将完成运行使用Selenium驱动程序,它实际上会打开一个浏览器窗口,并测试您的应用程序作为一个真正的用户您的方案可能会包括Javascript执行。它会默认使用Firefox,因此请确保已安装。

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

+0

我加入@javascript,现在它说'当我尝试使用下面的用户帐户登录:#功能/ step_definitions/user_steps.rb:65 |电子邮件地址|密码| | [email protected] |密码| 无法找到字段“电子邮件”(Capybara :: ElementNotFound)'这是user_steps.rb代码'给定/ ^我尝试使用电子邮件登录“(。*?)”,密码“(。*?)”$ /做|电子邮件,密码| 登录(电子邮件,密码) end''DEF登录(电子邮件,密码) FILL_IN( 'USER_EMAIL',:与=>电子邮件) FILL_IN( 'USER_PASSWORD',:与=>密码) click_button( '登录' ) end' – user588324

+1

它看起来像你的测试试图运行登录步骤,但浏览器不在正确的页面上。您应该能够观看浏览器并查看它正在导航的页面,以确保它是正确的。 您也可以在''我在主页上'的步骤的最后加上'save_and_open_page',这将打开您的测试导航到的页面的“快照”。 –