Ruby on rails 为用户创建多个工厂
早些时候,我为用户建立了一个工厂,它运行良好 但是现在,我想要两套用于用户数据的工厂,一套带有加密的详细信息,另一套带有纯文本用户详细信息 这是我正在使用的代码:Ruby on rails 为用户创建多个工厂,ruby-on-rails,ruby-on-rails-4,rspec,factory-bot,rspec-rails,Ruby On Rails,Ruby On Rails 4,Rspec,Factory Bot,Rspec Rails,早些时候,我为用户建立了一个工厂,它运行良好 但是现在,我想要两套用于用户数据的工厂,一套带有加密的详细信息,另一套带有纯文本用户详细信息 这是我正在使用的代码: FactoryBot.define do factory :user do trait :encryption do email AESCrypt.encrypt(Faker::Internet.email, ENV["AES_KEY"]) password
FactoryBot.define do
factory :user do
trait :encryption do
email AESCrypt.encrypt(Faker::Internet.email, ENV["AES_KEY"])
password AESCrypt.encrypt("password", ENV["AES_KEY"])
password_confirmation AESCrypt.encrypt("password",ENV["AES_KEY"])
username Faker::Name.name
end
trait :unencrypted_user_details do
email Faker::Internet.email
password "password"
password_confirmation "password"
username Faker::Name.name
end
end
end
并使用与等级库文件中相同的:
user = FactoryBot.create(:user,:unencrypted_user_details)
但在运行规范时,我遇到以下错误:
NoMethodError:
undefined method `name=' for #<User:0x00000006d512f8>
失败:
1) Api::V2::UserApp::UsersController生成Pin Api为用户生成新Pin
失败/错误:user=FactoryBot.create(:未加密的用户详细信息)
控制器代码
def generate_pin
phone = ValidatePhone.find_by(phone_no: @client.phone_no)
phone.present? ? phone.update_attributes(is_verified: true) : ValidatePhone.create(phone_no: @client.phone_no)
sms_text = "Hello"
send_sms(@client.phone_no,sms_text)
render :json => {
:response_code => 200,
:response_message => "Welcome Onboard."
}
结束
这是创建多个工厂的正确方法吗?为什么我在未定义的方法名中得到这个错误 这不是创建可变工厂的方法。对于值是调用结果的字段,必须使用括号:
FactoryBot.define do
factory :user do
trait :encryption do
email { AESCrypt.encrypt(Faker::Internet.email, ENV["AES_KEY"]) }
password { AESCrypt.encrypt("password", ENV["AES_KEY"]) }
password_confirmation { AESCrypt.encrypt("password",ENV["AES_KEY"]) }
username { Faker::Name.name }
end
trait :unencrypted_user_details do
email { Faker::Internet.email }
password "password"
password_confirmation "password"
username { Faker::Name.name }
end
end
end
请看一下指南:
你的问题是什么?这是创建多个工厂的正确方法吗?为什么我会在未定义的方法名称中出现此错误?Faker::name.name?添加完整的错误跟踪,请Faker::name.name是正确的..我在运行user=FactoryBot.create(:user,:unencrypted\u user\u details)时出错
describe "Generate Pin API" do
it "generates a new pin for the user" do
user = FactoryBot.create(:unencrypted_user_details) #line 43
client = user.client
request.env["HTTP_AUTHORIZATION"] = user.auth_token
get :generate_pin
response_json = JSON.parse(response.body)
expect(response_json["response_code"]).to eq(200)
end
end
def generate_pin
phone = ValidatePhone.find_by(phone_no: @client.phone_no)
phone.present? ? phone.update_attributes(is_verified: true) : ValidatePhone.create(phone_no: @client.phone_no)
sms_text = "Hello"
send_sms(@client.phone_no,sms_text)
render :json => {
:response_code => 200,
:response_message => "Welcome Onboard."
}
FactoryBot.define do
factory :user do
trait :encryption do
email { AESCrypt.encrypt(Faker::Internet.email, ENV["AES_KEY"]) }
password { AESCrypt.encrypt("password", ENV["AES_KEY"]) }
password_confirmation { AESCrypt.encrypt("password",ENV["AES_KEY"]) }
username { Faker::Name.name }
end
trait :unencrypted_user_details do
email { Faker::Internet.email }
password "password"
password_confirmation "password"
username { Faker::Name.name }
end
end
end