为什么此控制器测试创建操作失败?

时间:2009-02-09 18:06:59

标签: ruby-on-rails ruby

我在这里遇到了一个失败的测试,我无法理解。我正在使用Test :: Unit和Shoulda增强功能。 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

失败,因为“响应是<:success>,但是< 302>”。怎么样302?

将行动改为......

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

测试仍然失败。

2 个答案:

答案 0 :(得分:1)

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

答:禁止是安静的奇怪。以下是一些找到问题的建议(我从未使用过Shoulda,但我不认为这是与Shoulda的问题。

  1. 确保路线在 config / routes.rb 中定义,并使用佣金路线检查
  2. 您是否有任何可能对该行为负责的before_filters(登录过滤器,acts_as_authenticated等)? Checkout log / test.log。过滤器链中的停止显示在那里。
  3. 打印出响应正文 puts response.body 以查看返回的内容。
  4. 希望这有帮助。

答案 1 :(得分:-1)

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