2016-03-29 5 views
7

Я работаю на мои первые рельсы приложение здесь и два из сгенерированных тестов не проходят:Rspec терпит неудачу при тестировании вида формы редактирования

Failures: 

    1) gardens/edit renders the edit garden form 
    Failure/Error: assert_select "inputgarden_name[name=?]", "garden[name]" 

    Minitest::Assertion: 
     Expected at least 1 element matching "inputgarden_name[name="garden[name]"]", found 0.. 
     Expected 0 to be >= 1. 
    # ./spec/views/gardens/edit.html.haml_spec.rb:20:in `block (3 levels) in <top (required)>' 
    # ./spec/views/gardens/edit.html.haml_spec.rb:18:in `block (2 levels) in <top (required)>' 

    2) gardens/new renders new garden form 
    Failure/Error: assert_select "inputgarden_name[name=?]", "garden[name]" 

    Minitest::Assertion: 
     Expected at least 1 element matching "inputgarden_name[name="garden[name]"]", found 0.. 
     Expected 0 to be >= 1. 
    # ./spec/views/gardens/new.html.haml_spec.rb:19:in `block (3 levels) in <top (required)>' 
    # ./spec/views/gardens/new.html.haml_spec.rb:17:in `block (2 levels) in <top (required)>' 

Finished in 1.15 seconds (files took 2.74 seconds to load) 
34 examples, 2 failures, 17 pending 

Failed examples: 

rspec ./spec/views/gardens/edit.html.haml_spec.rb:15 # gardens/edit renders the edit garden form 
rspec ./spec/views/gardens/new.html.haml_spec.rb:14 # gardens/new renders new garden form 

Я не уверен, почему это происходит. Когда я смотрю на тест, я немного удивлен, что путь не содержит идентификатор для редактирования (что-то вроде /gardens/#{@garden.id}/edit). Когда я пытаюсь отредактировать тест, rspec не запускается, сообщая мне, что @garden еще не создан.

спецификации/вид/сады/edit.html.haml_spec.rb:

1 require 'rails_helper' 
    2 
    3 
    4 RSpec.describe "gardens/edit", type: :view do 
    5 before(:each) do 
    6  @garden = assign(:garden, Garden.create!(
    7  :name => "MyString", 
    8  :square_feet => 1, 
    9  :zone => 1, 
10  :garden_type => "MyString", 
11  :user => nil 
12 )) 
13 end 
14 
15 it "renders the edit garden form" do 
16  render 
17 
18  assert_select "form[action=?][method=?]", garden_path(@garden), "post" do 
19 
20  assert_select "input#garden_name[name=?]", "garden[name]" 
21 
22  assert_select "input#garden_square_feet[name=?]", "garden[square_feet]" 
23 
24  assert_select "input#garden_zone[name=?]", "garden[zone]" 
25 
26  assert_select "input#garden_garden_type[name=?]", "garden[garden_type]" 
27 
28  assert_select "input#garden_user_id[name=?]", "garden[user_id]" 
29  end 
30 end 
31 end 

Что я должен сделать, чтобы сделать эти тесты пройдены?

EDIT: вот мнения редактировать

/app/views/gardens/edit.html.haml:

%h1 Editing garden 

= render 'form' 

= link_to 'Show', @garden 
\| 
= link_to 'Back', gardens_path 

/app/views/gardens/_form.html. haml:

= simple_form_for(@garden) do |f| 
    = f.error_notification 

    .form-inputs 
    = f.input :name 
    = f.input :square_feet 
    = f.input :zone 
    = f.input :garden_type 
    = f.association :user 

    .form-actions 
    = f.button :submit 
+0

Как выглядит вид, который вы пытаетесь использовать? Я не уверен, что вы говорите о пути, не содержащем идентификатор. –

+0

да, не могли бы вы дать дополнительную информацию? Меня удивляет то, что для двух разных тестов он дает ошибку в том же месте (строки 17 и 27). Может быть, что-то пошло не так, прежде чем ваш конкретный тест между ним ... конец запущен? – Axe

+0

@Axe: Честно говоря, я здесь довольно утерян; это мой первый раз с rspec, и я просто пытаюсь понять, как сделать эти сгенерированные тесты пройденными. Это также мое первое приложение для рельсов, поэтому возможно, что я упал с этого «Золотого пути» где-то, не зная об этом. Кроме того, я просто обновил свой пост, и эти номера строк немного изменились (по-моему, из новой новой строки). – doub1ejack

ответ

6

Сообщение об ошибке, которое вы указали, указывает, что n элемент html для данного совпадения не найден.

Для ассоциаций Простая форма gem генерирует select элементов вместо input элементов по умолчанию. https://github.com/plataformatec/simple_form#associations

Вам нужно изменить последнее утверждение на: assert_select "select#garden_user_id[name=?]", "garden[user_id]"

Я предполагаю, что вопрос имеет место в спецификации для нового вида?

+0

Молодцы; особенно, даже не видя разметки:) Да, он искал поле ввода вместо поля выбора. Спасибо, несколько штук просто нажали на место для меня. – doub1ejack

Смежные вопросы