2015-06-05 3 views
0

Вот мой код для контроллераRails 4 MiniTest функциональный тест не удалось для создания метода

def create 
    @post = Post.new(post_params) 
    if @post.save 
    redirect_to @post 
    else 
    render 'new' 
    end 
end 

и мой код для тестирования

test "should get create post" do 
    assert_difference('Post.count') do 
    post :create, post: {title: @post.title, content: @post.content} 
    end 
    assert_redirected_to post_path(assigns{:post}) 
end 

ошибка, что я получаю

ArgumentError: сравнение массива с массивом не выполнено тест/контроллеры/posts_controller_test.rb: 22: in `block in '

если я удалить (правопреемники {: пост}) и попробуйте тест

я получаю эту ошибку

ActionController :: UrlGenerationError: Нет маршрута матчей {: действие => "показать",: контроллер =>» posts "} отсутствующие требуемые ключи: [: id] Также как протестировать if, если не выполнить« новую »часть в контроллере.

Благодаря

ответ

0

@post не экземпляр нигде в тесте. Вам нужно пройти в Params как так

post :create, post: {title: 'title', content: 'content'}

+0

нет это все еще не работает, потому что я сделал включить это в начальной настройке делать @post = сообщения (: один) конца –

+0

Какова ваша валидация на модели? Не забывайте, что светильники уже загружены в базу данных, поэтому, если у вас есть уникальное ограничение на ': title' или ': content', сохранение завершится неудачно. – rkamun1

1

В следующей строке

assert_redirected_to post_path(assigns{:post}) 

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

assert_redirected_to post_path(assigns(:post)) 
Смежные вопросы