首页 > 解决方案 > 为什么 RSpec/Capybara 使用 public_send 提供的连字符值抛出错误?

问题描述

我有一个共享示例,用于在多个控制器上测试相同的内容。我将模型和字段列表传递给控制器​​以检查以确保它们在页面上,但是当值是连字符字符串时,它会引发错误,即使值在页面上也是如此。不过,奇怪的是,它在支票上去掉了连字符。所以,如果用户表中的姓氏字段有“Johnson-Smith”这就是我得到的......

expected to find text matching "Johnson Smith" in...

在它呈现的页面文本中向下看,我可以清楚地看到“Johnson-Smith”。我不明白为什么 Rspec/Capybara 不检查正确的值。这是共享的示例代码..

RSpec.shared_examples 'renders proper fields' do |klass, fields|
  it 'should render the expected text' do
    model_object = klass.order(:created_at).last
    fields&.each do |field|
      expect(page).to have_text(model_object.public_send(field))
    end
  end
end

编辑我测试了每个被评估的 public_send(field) 的结果,结果表明 public_send 正在按预期从数据库中返回字段。所以问题是,出于某种原因,Capybara 在没有连字符的情况下对其进行评估,即使它通过了带有连字符的文本。

标签: ruby-on-railsrubyrspeccapybara

解决方案


推荐阅读