使用工厂女孩特征时,未定义的方法`symbolize_keys'

时间:2015-12-09 19:40:25

标签: ruby-on-rails ruby factory-bot

我正在使用ruby v1.9.3和factory_girl v2.2并试图设置特征。但是当我尝试使用我的特性时,我得到了这个错误。是因为我使用的红宝石版本?

 Failure/Error: let!(:notification) { create(:notification, :confirmable) }
 NoMethodError:
   undefined method `symbolize_keys' for :confirmable:Symbol
 # ./spec/controllers/api/v1/sms_controller_spec.rb:13:in `block (3 levels) in <top (required)>

这是我的工厂:

FactoryGirl.define do
  factory :notification do
    smssid { Faker::Number.number(10) }
    msg    { Faker::Lorem.sentence(3) }
    to     { Faker::PhoneNumber.phone_number }

    trait :confirmable do
      confirmable  "true"
    end
  end
end

规格:

require 'spec_helper'

describe Api::V1::SmsController do

  let!(:user) { create(:user) }

  describe "GET /api/v1/user/sms" do

    let!(:notification) { FactoryGirl.create(:notification, :confirmable) }

    context "a user replies to a confirmation with c" do
      it "does something" do
        get :incomming_message, :sid => notification.smssid,
                                :to => notification.to,
                                :from => user.phone_number,
                                :body => "c",
                                :status => "recieved",
                                :format => :json
        notification.reload
        notification.confirmed.should eq(true)
      end
    end
  end
end

***编辑,使用我的spec文件更新

1 个答案:

答案 0 :(得分:-1)

不,您使用的Ruby版本与symbolize_keys无关,因为它不是Ruby核心的一部分。 1.9.3和2.2.2都不包含它。相反,symbolize_keys是Hash类的ActiveSupport扩展。您必须加载Active支持才能使其正常工作。请参阅:Rails-4.2.5 : Object::HashWithIndifferentAccess < Hash

由于这是一个我错过的RoR问题(mea culpa),问题显然在于将confirmable声明为符号而不是哈希。但是,在任何一种情况下,使用的Ruby版本都与问题无关。