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 |
      | abc@company1.com   | password |

    Then I should see "abc@company1.com" message on page
    When I follow "All Child Users"
    And I view "Child Categories" for sub user "xyztest@gmail.com"
    Then I should see "Default Filter Level for User xyztest@gmail.com is"
    When I press "APPLY"
    Then I should see "Custom Filter Created for xyztest@gmail.com"

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: "xyztest@gmail.com", 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

features/support の下にある user.rb という名前のファイルには、一部のユーザー フィールドを上書きするコードがあり、'factory_girl_rails' が必要です。

FactoryGirl.define do
  factory :user do |u|
    u.email 'recdns@company1.com'
    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 post を使用してコントローラーに移動し、レコードを作成していることです。ここにコントローラーコードがあります

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

助言がありますか?ありがとう

4

1 に答える 1

1

Cucumber で Capybara を使用していると仮定すると、Javascript はデフォルトでは実行されません。非常に簡単な解決策は@javascript、シナリオにタグを追加することです。

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

Seleniumドライバーを使用してシナリオを実行すると、実際にブラウザー ウィンドウが開き、Javascript の実行を含む実際のユーザーと同じようにアプリケーションがテストされます。デフォルトで Firefox を使用しようとするので、Firefox がインストールされていることを確認してください。

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

于 2013-05-31T20:25:22.710 に答える