ruby-on-rails 如何使用rspec运行StimulusJs

fnatzsnv  于 2023-05-19  发布在  Ruby
关注(0)|答案(1)|浏览(162)

我有一个模态成分,在模态里面我有一个形式。模态使用StimulusJs显示或隐藏。当我使用turbo_stream渲染模态组件时,它执行刺激控制器并显示它。然而,当我试图使用rspec测试它时,我看到内容通过turbo_stream加载,但它并没有直观地显示出来。我总是得到以下错误:

Unable to find visible field "user[username]" that is not disabled within #<Capybara::Node::Element tag="div" path="/HTML/BODY[1]/TURBO-FRAME[1]/DIV[1]/DIV[3]/DIV[1]/DIV[3]">

请注意,内容不会出现在页面加载中,只有当单击按钮时才会加载模态组件。我知道这是有效的,因为在单击按钮后,我有一个expect

expect(page).to have_css("[data-controller='modal']")

但是当你想逃跑的时候

fill_in("Username", with: "testing01")

我已经尝试了不同的变化,如find(#).set(),但总是与错误的元素是不可见的。

describe "Username modal", type: :system do
  it "should change the username" do
    visit profile_path
    
    expect(page).to_not have_css("[data-controller='modal']")
    page.find("#change-username").click
    
    expect(page).to_not have_css("[data-controller='modal']")
    fill_in("Username", with: "testing01") # <--- Error mentioned above
    page.find("#submit-change-username").click
    
    expect(page).to have_text("Username changed!")
  end
end

这让我认为StimulusJS没有运行。我需要做些什么来确保它在rspec中运行?

atmip9wb

atmip9wb1#

为了将来的参考,我意识到我需要为测试预编译资产以获取最新的更改。我跑完了:rails assets:clobber assets:precompile。然后,我重新启动服务器,运行测试增益,它的工作。

相关问题