Rails 4 minitest功能测试失败的创建方法

时间:2015-06-05 05:33:28

标签: ruby-on-rails 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:Array与Array的比较失败     test / controllers / posts_controller_test.rb:22:在`block in'

如果我删除(指定{:post})并尝试测试

我收到此错误

ActionController :: UrlGenerationError:没有路由匹配{:action =>" show",:controller =>" posts"}缺少必需的密钥:[:id] 另外如何测试if失败渲染' new'参与控制器。

由于

2 个答案:

答案 0 :(得分:1)

在以下一行

assert_redirected_to post_path(assigns{:post})

使用括号而不是花括号。代码应如下所示:

assert_redirected_to post_path(assigns(:post))

答案 1 :(得分:0)

@post未在测试中的任何位置实例化。你需要像这样传递参数

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