1

私はこのシナリオを作成しようとしています:

scenario 'creating a new item category' do
  page.find("#launch-category-form-modal").click
  expect(page).to have_selector("#category-form-modal.active")
  fill_in("item_category[name]", with: "pudim")
  find("#submit-category-form-modal").click
  within ".sweet-alert.visible" do
    find('button.confirm').trigger('click')
  end
  expect(page).to have_selector(".category-line:last-child td:first-child",
                                text: "pudim")
end

フローは次のとおりです。

  1. ユーザーは入力に名前を入力します。
  2. 送信ボタンをクリックします。
  3. スイート アラートが成功メッセージと共に表示されます。
  4. スイートアラート内の「OK」をクリックします。
  5. jQuery で新しい行が作成され、html テーブルに追加されます。

このフローを担当する JS コードは次のとおりです。

$.ajax({
  url: "/admin/item_categories",
  method: "POST",
  data: data,
  success: function(data) {
    if (data.status == true) {
      swal(
        'Success',
        'Item Category created successfully',
        'success'
      );
      var newLine = createItemCategoryLine(data.itemCategory);
      $("#item-category-table-body").append(newLine);
      $("#category-form-modal").modal('hide');
      $("form[action='/admin/item_categories']")[0].reset();
    } else if(data.status == false) {
      swal(
        'Error',
        'Something went wrong!',
        'error'
      )
    }
  }

をクリックした後submit button、カピバラは甘いアラートを見つけることができません。使用save_and_open_screenshotしてみましたが、スイートアラートが画面に表示されません。byebugコントローラーでも試しましたが、呼び出されません。

を使用して:selenium_chromeいます。

助けてくれてありがとう!

編集 1

@ThomasWalpole のいくつかのコメントの後、<%= csrf_meta_tag %>対応するタグをレンダリングしない理由を見つけようとしました。かどうかを確認するために呼び出すだけであることがわかりました。テスト環境で動かしているので、. テストを変更して再実行しました。csrf メタ タグはレンダリングされましたが、まだ http ステータス 405 - ajax 呼び出し後にメソッドが許可されていません。csrf_meta_tagprotect_against_forgery?config.action_controller.allow_forgery_protectiontrueconfig.action_controller.allow_forgery_protectionfalsetrue

編集 2

@ThomasWalpoleが要求した私のルート:

item_categories_path    GET /admin/item_categories(.:format)    
item_categories#index

create_item_category_path   POST    /admin/item_categories(.:format)    
item_categories#create

update_item_category_path   PATCH   /admin/item_categories/:id(.:format)    
item_categories#update

delete_item_category_path   DELETE  /admin/item_categories/:id(.:format)    
item_categories#destroy 

編集 3

私のカピバラの設定:

ENV["RAILS_ENV"] ||= "test"
require File.expand_path("../../config/environment", __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require "spec_helper"
require "rspec/rails"
# Add additional requires below this line. Rails is not loaded until this point!
require "capybara/rspec"

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

ActiveRecord::Migration.maintain_test_schema!

Capybara.register_driver :selenium_chrome do |app|
 Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.javascript_driver = :selenium_chrome

# To ensure that browser tests can find the test server process,
# always include the port number in URLs.
Capybara.always_include_port = true
4

0 に答える 0