【问题标题】:How to assign variables when using RSpec to test jbuilder views使用 RSpec 测试 jbuilder 视图时如何分配变量
【发布时间】:2012-10-01 23:45:07
【问题描述】:

我正在尝试编写 RSpec 测试来测试我使用 jbuilder 构建的模板,该模板最终为我的 API 提供 JSON 数据。我在spec/controllers 中有许多测试我的控制器功能的测试,但我也希望测试我在我的 jbuilder 视图中呈现正确的 JSON 字段。这是我设置的示例:

# app/views/api/v1/users/create.json.jbuilder
json.first_name user.first_name

# spec/views/api/v1/users/create.json.jbuilder_spec.rb
require 'spec_helper'
describe "api/v1/users/create.json.jbuilder" do
  it "renders first_name" do
    assign( :user, User.create( :first_name => "Bob" ) )
    render
    hash = JSON.parse( rendered )
    hash.has_json_node( :first_name ).with( "Bob" )
  end
end

我在运行rspec spec/views/api/v1/users/create.json.jbuilder_spec.rb 时得到的是以下错误

Failures:

  1) api/v1/users/create.json.jbuilder render a user
     Failure/Error: render
     ActionView::Template::Error:
       undefined local variable or method `user' for #<#<Class:0x007fa2911c3118>:0x007fa29105f2b8>
     # ./app/views/api/v1/users/create.json.jbuilder:1:in `_app_views_api_v__users_create_json_jbuilder___3806288263594986646_70168098229960'
     # ./spec/views/api/v1/users/create.json.jbulder_spec.rb:6:in `block (2 levels) in <top (required)>'

无论我如何尝试将user 对象分配/创建/传递给模板,它都失败了。知道我可能做错了什么吗?

【问题讨论】:

    标签: json api rspec2 rspec-rails jbuilder


    【解决方案1】:

    经过大量阅读和迭代,这是有效的:

    require 'spec_helper'
    describe "api/v1/users/create.json.jbuilder" do
    
        let( :user )    { User.create( :not_strict => true ) }
    
        it "renders first_name" do
            render :template => "api/v1/users/create", :locals => { :user => user }, :formats => :json, :handler => :jbuilder
            rendered.should have_json_node( :first_name ).with( user.first_name )
        end
    end
    

    注意:have_json_node 来自 api_matchers gem

    【讨论】:

      【解决方案2】:

      assigns 方法设置实例变量,您的视图应该是 @user.first_name 而不是 user.first_name,还是部分视图?如果它是部分你应该渲染:partial => ...,如果它是一个模板你应该使用@user

      【讨论】:

        猜你喜欢
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        • 2015-10-20
        相关资源
        最近更新 更多