rails controller test,获取ActionView :: MissingTemplate:缺少模板

时间:2011-01-23 07:02:11

标签: ruby-on-rails testing

我想我最后应该为我的rails应用程序编写一些测试。

我的控制器是“UsersController”。它没有任何HTML,因为我只有一个iphone应用程序发送帖子到rails控制器。

这是我的测试:

require 'test_helper'

class UsersControllerTest < ActionController::TestCase


  def test_create
    # to http post
    # /users
    #user[email]=%@&user[password]=%@&user[password_confirmation]=%@
    #post
    post(:create, :user => {:password => "testpassword", :password_confirmation => "testpassword"})
  end

问题是我收到了这个错误:

1)错误: test_create(的UsersControllerTest): ActionView :: MissingTemplate:缺少模板用户/ new {{handlers =&gt; [:erb,:rjs,:builder,:rhtml,:rxml] ,: formats =&gt; [:html],:locale =&gt; [视图路径中的:en,:en]}

所以我猜它正在尝试填充HTML页面?如果是这样,我发现这很奇怪。我认为它会直接向控制器发帖。有人可以确认这个“post”方法尝试并填充HTML表单吗?

如果是这种情况,我应该如何编写测试以直接向控制器发送HTTP帖子?

感谢您的帮助

2 个答案:

答案 0 :(得分:6)

您可以指定“格式”以使其有效:

post(:action, {'param1'=>'value1', 'param2' => 'value2', :format => 'js'})

答案 1 :(得分:1)

除非你告诉它,否则post方法假定所请求的内容类型是HTML。通常,create操作看起来像这样:

@user = User.new(params[:user])
if @user.save
  redirect_to posts_path
else
  render :new
end

如果操作失败,它会尝试渲染不存在的'users / new',从而导致错误。

所以这里有几个问题。目前尚不清楚预期的内容类型是什么(XML?)。行动失败了,但我们不明白为什么。编辑问题可能有助于向我们展示控制器操作的作用。