

ユーザー削除ボタンを押した時のモーダルの表示内容をテストしたいのですが  
以下のエラーが表示されてしまいます。

[code]

    it "他のユーザーを削除できること" do
      visit user_path(I18n.locale, other_user)
      page.dismiss_confirm(I18n.t("users.show.このユーザーを完全に削除します。本当によろしいですか？")) do
        find(".card-link.delete-user").click # 「アカウントを削除」をクリック
      end
    end
    
[/code]

[code]

    Failure/Error:
       page.dismiss_confirm(I18n.t("users.show.このユーザーを完全に削除します。本当によろしいですか？")) do
         find(".card-link.delete-user").click
       end
     
     Capybara::ModalNotFound:
       Unable to find modal dialog with Xóa bỏ người dùng này. Bạn có chắc bạn muốn làm điều này?
    
[/code]

ただ、スクショを見るとモーダルは表示されていて、注意喚起の文言も一致しておりました。

## 試したこと

・capybara-webkit をbundle install  
・もともと、expect(page.driver.browser.switch_to.alert.text).to eq I18n.t〜...  
でテストを書いていた際は次のエラーが出ておりました。

[code]

    Selenium::WebDriver::Error::NoSuchAlertError:
       no such alert
         (Session info: headless chrome=85.0.4183.121)
    
[/code]

## コード

[code]

    <%= link_to "アカウントを削除", user_path(@user), method: :delete, class: "card-link delete-user",
                                                data: { confirm: t(".このユーザーを完全に削除します。本当によろしいですか？") }, title: t(".削除確認") %>
    
[/code]

[code]

    group :development, :test do
      gem "byebug", platforms: [:mri, :mingw, :x64_mingw]
      gem "pry-rails"
      gem "pry-byebug"
      gem "pry-doc"
      gem "rspec-rails", "~> 3.9"
      gem "factory_bot_rails", "~> 4.11"
      gem "database_cleaner"
      gem "show_me_the_cookies"
      gem "faker", :git => "https://github.com/faker-ruby/faker.git", :branch => "master"
    end
    
    group :test do
      gem "capybara", ">= 2.15"
      gem "capybara-webkit"
      gem "selenium-webdriver"
      gem "webdrivers"
    end
    
[/code]

spec_helper.rb

[code]

    require "capybara/rspec"
    require "database_cleaner"
    
    RSpec.configure do |config|
      config.before(:each, type: :system) do
        driven_by :selenium_chrome_headless
      end
    
      config.expect_with :rspec do |expectations|
        expectations.include_chain_clauses_in_custom_matcher_descriptions = true
      end
    
      config.mock_with :rspec do |mocks|
        mocks.verify_partial_doubles = true
      end
    
      config.shared_context_metadata_behavior = :apply_to_host_groups
    
      config.before(:suite) do
        DatabaseCleaner.strategy = :truncation
      end
    
      config.before(:each) do
        DatabaseCleaner.start
      end
    
      config.after(:each) do
        DatabaseCleaner.clean
      end
      
    end
    
    
[/code]

どなたか、解決方法を教えて頂けないでしょうか。  
よろしくお願い致します。

## 更新 2020.10.16

以下で対応することにしました。  
先頭行をコメントアウトするときちんとエラーになるので、これでいいかなと思います。

[code]

    find(".card-link.delete-user").click # 「アカウントを削除」をクリック
    within ".modal-content" do
      expect(page).to have_content I18n.t("users.show.削除確認")
      expect(page).to have_content I18n.t("users.show.このユーザーを完全に削除します。本当によろしいですか？")
      expect { click_button "Confirm" }.to change { User.count }.by(-1)
    end
    
[/code]


CC BY-SA 4.0
2020-10-06T00:28:55.263
70943
2020-10-16T03:13:48.507
2020-10-16T03:13:48.507
38225
38225
question
ruby rspec capybara
RSpec x Capybara モーダルは表示されているが見つけてくれない


> Unable to find modal dialog with Xóa bỏ người dùng này. Bạn có chắc bạn muốn
> làm điều này?

これが日本語じゃないのが気になりました。

ひとまず、dismiss_confirmは第一引数を省略できるようでした (
<https://rubydoc.info/gems/capybara/3.33.0/Capybara/Session#dismiss_confirm-
instance_method> ) ので、

[code]

    it "他のユーザーを削除できること" do
      visit user_path(I18n.locale, other_user)
      page.dismiss_confirm do
        find(".card-link.delete-user").click # 「アカウントを削除」をクリック
      end
    end
    
[/code]

を試してみるのはどうでしょう？


CC BY-SA 4.0
2020-10-06T15:46:46.033
70968
2020-10-06T15:46:46.033
42212
70943
answer