2016-02-23 6 views
0

Я пишу тесты для своей заявки. Я написал немало тестов, и они отлично работали. Тем не менее, два моих теста продолжают терпеть неудачу, и я не уверен, почему это так. Первый тест - неудачное редактирование формы. Тест приведен нижеПроблемы с тестированием в рельсах

test "unsuccessfull editing of the scoreboard" do 
    log_in_as(@user) 
    get edit_scoreboard_path(@scoreboard) 
    assert_template 'scoreboards/edit' (doesn't work) 
    patch scoreboard_path(@scoreboard), scoreboard: { name_of_scoreboard: "a"* 51, 
                 name_of_organization: "b"*60, 
                 name_of_activity: "c"*60 } 
    assert_template 'scoreboard/edit' (doesn't work) 

    end 

ошибка, связанная с этим тестом приводится ниже.

ScoreboardEditTest#test_unsuccessfull_editing_of_the_scoreboard [/home/ubuntu/workspace/test/integration/scoreboard_edit_test.rb:13]: 
expecting <"scoreboards/edit"> but rendering with <[]> 

Контроллер для следующего испытания также приведен ниже.

def update 
    @scoreboard = Scoreboard.find(params[:id]) 
    if @scoreboard.update_attributes(scoreboard_params) 
    redirect_to @scoreboard 
    flash[:success] = "Updated Successfully" 
    else 
    render 'edit' 
    end 
end 

После того, как вы получите edit_scoreboard_path, должен появиться шаблон табло редактирования. Я не совсем уверен, почему это дает мне ошибку. У меня есть то же самое с моделью пользователя и его работа отлично. Я думаю, что у меня что-то не хватает, я понимаю, что это работает.

Второй тест - действительное создание табло. Тест приведен ниже.

test "valid creation of the scoreboard with passing validations" do 
    log_in_as(@user) 
    get new_scoreboard_path 
    assert_difference 'Scoreboard.count', 1 do 
     post scoreboards_path, scoreboard: {name_of_scoreboard: "abc", 
              name_of_organization: "def", 
              name_of_activity: "ghi" } 
     end 
     assert_redirected_to scoreboard_path(@scoreboard) (doesn't work) 
     assert_equal 'Scoreboard created successfully', flash[:success] 
    end 

Он перенаправляет неверный идентификатор табло. В приборах у меня установлен идентификатор 1. Сообщение об ошибке приведено ниже.

Expected response to be a redirect to <http://www.example.com/scoreboards/1> but was a redirect to <http://www.example.com/scoreboards/941832920>. 

Я не уверен, что это значит. Как я уже упоминал, у меня есть идентификатор, установленный в светильниках. Я даже вручную установил идентификатор «941832920». Это все еще дало мне ошибку. Не знаю, почему это делается.

ответ

0

Для вашего второго теста я не думаю, что вы можете установить идентификатор, он будет назначен базой данных, когда запись будет сохранена. Лучшим способом проверки того, попадете ли вы на правильный маршрут табло, будет предпочтительный формат: assert_redirected_to scoreboard_path(assigns(:scoreboard)).

+0

Формат выше работал. Кажется, я знаю, почему это сработало, но я не совсем уверен. Кроме того, любая подсказка, почему первый тест терпит неудачу. –

+0

Это для тех, у кого такая же проблема. Первый тест завершился неудачно из-за фильтра before_action. Я должен был быть правильным пользователем, чтобы иметь возможность редактировать табло. Правильный пользователь - пользователь, связанный с табло. Я создал ассоциацию файла my fixtures (.yml). Поэтому @user был правильным пользователем, и я перенаправлялся на правильную страницу –