【问题标题】:Using Capybara syntax correctly?正确使用 Capybara 语法?
【发布时间】:2014-04-02 17:52:24
【问题描述】:

我有一项任务,我试图让网页生成所有者及其狗的列表。具体来说,我试图在页面上列出所有者的名字和他们各自的 dog_name。现在,到目前为止,我的测试只使用了一对主人/宠物,但是当我尝试使用预先生成的对测试页面时,文本没有显示出来。以下是我的 rspec/capybara 测试代码:

given(:dog_owner_one) { Dog.create(:first_name => 'Carmen', :last_name => 'Dent',
    :email => 'cdent@someemail.com', :dog_name => 'Shelby') }
given(:dog_owner_two) { Dog.create(:first_name => 'David', :last_name => 'Rubio',
    :email => 'dnr@someemail.com', :dog_name => 'Chronus') }

 scenario 'create a valid dog' do
  valid_dog = Dog.count
  dog_name = "Rover"
  first_name = "Daniel"
  visit new_dog_path
  fill_in 'First Name', with: first_name
  fill_in 'Last Name', with: 'Rubio'
  fill_in 'Email Address', with: 'www.drubio1989@gmail.com'
  fill_in 'Dog Name', with: dog_name
  click_button 'Register Dog'
  expect(page).to have_content('Dog Registered')
  expect(Dog.count).to eql(valid_dog + 1)
  expect(page).to have_content(first_name)
  expect(page).to have_content(dog_name)
  expect(page).to have_content(dog_owner_one.first_name)
  expect(page).to have_content(dog_owner_one.dog_name)
  expect(page).to have_content(dog_owner_two.first_name)
  expect(page).to have_content(dog_owner_one.dog_name)
end

我的语法有问题。我对 Rails 和 capybara 很陌生,但我很确定这应该有效。我试过 Dog.make 但 rspec 错误告诉我有一个未定义的方法“make”,所以它不起作用。我也尝试过像这样修复期望语法:

  expect(page).to have_content(dog_owner_one[first_name])
  expect(page).to have_content(dog_owner_one[dog_name])
  expect(page).to have_content(dog_owner_two[first_name])
  expect(page).to have_content(dog_owner_one[dog_name])

这通过了,但它没有显示在我的网页上。哪个不好.....我试过这个:

expect(page).to have_content(dog_owner_one.first_name)
  expect(page).to have_content(dog_owner_one.dog_name)
  expect(page).to have_content(dog_owner_two.first_name)
  expect(page).to have_content(dog_owner_one.dog_name)

可能是什么问题?我不知道还能尝试什么。

我不知道这是否会有所帮助,但这是我的 index.html.erb 文件的代码:

<h1> List of Registered Dogs </h1>

<% if @dog.present? %>
  <ul>
  <% @dog.each do |dog| %>
    <li><%= "#{dog.first_name + ':' + ' ' + dog.dog_name}" %></li>
  <% end %>
  </ul>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby rspec capybara


    【解决方案1】:

    这可能与您的 given 块有关。 试试:

    background do
      dog_owner_one = Dog.create(:first_name => 'Carmen', :last_name => 'Dent', :email => 'cdent@someemail.com', :dog_name => 'Shelby')
      dog_owner_two = Dog.create(:first_name => 'David', :last_name => 'Rubio', :email => 'dnr@someemail.com', :dog_name => 'Chronus')
    end
    

    【讨论】:

    • 感谢您的回复,但我试过了,除非我排除了 background/do/end 块,否则它不起作用。我不明白为什么。
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    相关资源
    最近更新 更多