【问题标题】:Got error : can't be blank, Rails test出现错误:不能为空,Rails 测试
【发布时间】:2012-06-07 03:02:45
【问题描述】:

我想测试我的 Rails 应用程序,尤其是在控制器上,这里是代码

customer_controller_test.rb

    require 'test_helper'

class CustomersControllerTest < ActionController::TestCase
  include Devise::TestHelpers

  setup do
    @user = FactoryGirl.create(:user)    
    @role = FactoryGirl.create(:role)
    #puts @role.name
    @permission = FactoryGirl.create(:permission)
    #puts @permission.name
    @role_permission = FactoryGirl.create(:role_permission)
    #puts @role_permission.role_id
    #puts @role_permission.permission_id
    sign_in @user
    @customer = FactoryGirl.create(:customer)
  end

  test "should get index" do
    get :index
    assert_response :success
    assert_template 'index'
    assert_not_nil assigns(:customers)
  end

  test "should show article" do
    get :show, :id => @customer.to_param

    assert_response :success
    assert_template 'show'

    assert_not_nil assigns(:customer)
    assert assigns(:customer).valid?
  end

  test "should get new" do
    #login_as(@user)
    get :new
    assert_response :success
  end
end

factories.rb

FactoryGirl.define do

  sequence :email do |n| "admin@admin.admin#{n}" end
  sequence :role_name do |n| n end
  sequence :role_id do |n| n end
  sequence :permission_id do |n| n end

factory :user do |u|
    u.name           "Admin"
    u.role_id        {1}
    u.email          do FactoryGirl.generate(:email) end
    u.password       "123456"
    u.after(:create) do |user|
        user.creator_id  {1} 
        user.save
    end
  end

factory :customer do
    name    "Test customer-name"
    code    "Test customer-code"
    address "Test customer-address"
    phone   "Test customer phone"
  end

factory :permission do
    name "Customer"
  end

  factory :role do
    name do FactoryGirl.generate(:role_name) end
  end
end

我得到了错误

有什么想法吗?谢谢之前

【问题讨论】:

  • “角色不能为空”是一个失败的 Rails 模型验证。似乎您的用户没有获得分配的角色(这似乎是强制性的)。

标签: ruby-on-rails-3 factory-bot functional-testing


【解决方案1】:

在将角色分配给用户之前,尝试在 FactoryGirl 中创建角色。保存用户记录时,您似乎遇到了验证错误,因为它正在尝试验证您是否分配了实际角色。你没有,因为你试图在你的用户之后创建你的角色。

只需尝试像这样在 FactoryGirl“设置”中切换两行:

@role = FactoryGirl.create(:role)
@user = FactoryGirl.create(:user)    

或者,查看此链接以更全面地了解如何使用 FactoryGirl 测试关联:

http://blog.joshsoftware.com/2011/05/13/testing-associations-with-factory-girl/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多