我想我最后应该为我的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帖子?
感谢您的帮助
答案 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?)。行动失败了,但我们不明白为什么。编辑问题可能有助于向我们展示控制器操作的作用。