【问题标题】:rails controller test, getting ActionView::MissingTemplate: Missing templaterails 控制器测试,获取 ActionView::MissingTemplate: Missing template
【发布时间】:2011-01-23 07:02:11
【问题描述】:

我想我最终应该为我的 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: 缺少模板用户/新的 {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} 在视图路径中

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

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

感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails testing


    【解决方案1】:

    您可以指定“格式”以使其工作:

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

    【讨论】:

    • 我正在向返回 javascript 的控制器发送 ajax 帖子。将格式指定为 js 为我解决了这个问题 - 感谢您的提示。
    【解决方案2】:

    除非您另有说明,否则post 方法假定请求的内容类型是 HTML。通常,create 操作如下所示:

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

    如果操作失败,它会尝试呈现不存在的“用户/新用户”,因此会出现错误。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多