Ruby on rails 为什么创建操作上的控制器测试失败?

Ruby on rails 为什么创建操作上的控制器测试失败?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我这里的考试不及格,我很难理解。我正在使用Test::Unit,它应该具有增强功能。在users_controller.rb中的操作我正在尝试测试 def create unless params[:user][:email] =~ / specific regex needed for this app /i # ... render :template => 'sessions/new' end end 测试 context 'on CREATE to :

我这里的考试不及格,我很难理解。我正在使用Test::Unit,它应该具有增强功能。在users_controller.rb中的操作我正在尝试测试

def create
  unless params[:user][:email] =~ / specific regex needed for this app /i

    # ...

    render :template => 'sessions/new'
  end
end
测试

context 'on CREATE to :user' do
  context 'with invalid email' do
    setup { post :create, { 'user[email]' => 'abc@abcd' } }
    should_respond_with :success
  end
  # ...
end
失败,因为响应为,但为。302怎么样

将操作更改为

def create
  render :template => 'sessions/new'
end

测试仍然失败。

如果您使用的是默认的REST-ful URL,您可能应该使用PUT,而不是POST。。。由于PUT连接到create,因此发送到该URL会给您一个未经授权的重定向。

@Ola:您错了:POST连接到create。PUT通常连接到更新

A:不过《禁地》很奇怪。这里有一些建议来找出我从未使用过的Shoulda的问题,但我认为这不是Shoulda的问题

确保在config/routes.rb中定义了路由,并检查rake路由 您是否有任何before_筛选器可能负责登录筛选器、acts_as_authenticated等行为。。?签出日志/test.log。过滤器链中出现了一个停顿。 打印响应body put response.body以查看返回的内容。
希望这有帮助。

你确定吗?在Rails生成的POST/users{:controller=>users,:action=>create}中,我认为put是用于更新的。不过我试过了。同样的测试失败。PUT绝对用于更新,POST绝对用于创建