Ruby on rails 工厂女工的奇怪行为
我有一些测试模型: 使用者 承包人Ruby on rails 工厂女工的奇怪行为,ruby-on-rails,ruby,factory-bot,Ruby On Rails,Ruby,Factory Bot,我有一些测试模型: 使用者 承包人 FactoryGirl.define do factory :contractor, :parent => :user, class: 'Contractor' do type 'Contractor' u_token 'contractor' end end 顾客 FactoryGirl.define do factory :customer, :parent => :user, class: 'Customer'
FactoryGirl.define do
factory :contractor, :parent => :user, class: 'Contractor' do
type 'Contractor'
u_token 'contractor'
end
end
顾客
FactoryGirl.define do
factory :customer, :parent => :user, class: 'Customer' do
type 'Customer'
u_token 'customer'
contractor
end
end
顾客呢
FactoryGirl.define do
factory :customer_e, :parent => :user, class: 'CustomerE' do
type 'CustomerE'
u_token 'customer_e'
contractor
customer
end
end
在我的测试中,我有:
setup do
@customer = FactoryGirl.create :customer
@contractor = @customer.contractor
end
我的测试一切正常。
但如果我加上
setup do
@customer_e = FactoryGirl.create :customer_e
@customer = FactoryGirl.create :customer
@contractor = @customer.contractor
end
然后我的一些测试失败了。为什么会这样?
我并不是在所有情况下都使用@customer\u e
编辑:
好的,我的show user方法:
def show
user = User.find_by_u_token(params[:u])
if !user
render json: {status: 'error', descr: 'INVALID_U_TOKEN'}
return
end
user = find_user_for_user(user, params[:id])
if !user
render json: {status: 'error', descr: 'INVALID_USER_ID'}
return
end
render json: {status: 'ok', user: {email: user.email,
first_name: user.first_name,
last_name: user.last_name,
address: user.address,
country: user.country,
zip: user.zip,
city: user.city,
phone: user.phone,
company_name: user.company_name,
signature: user.signature,
lang:user.lang}}
end
def find_user_for_user(user, user_id)
users = users_for_user(user)
users.detect {|u| u.id == user_id.to_i}
end
def users_for_user(user)
users = []
case user.type
when 'Contractor'
users << user
user.contractorEs.each do |cne| users << cne end
user.customers.each do |cs| users << cs end
user.customerEs.each do |cse| users << cse end
else
users << user.contractor
user.contractor.contractorEs.each do |cne| users << cne end
user.contractor.customers.each do |cs| users << cs end
user.contractor.customerEs.each do |cse| users << cse end
end
users
end
以及我的查找用户方法:
def show
user = User.find_by_u_token(params[:u])
if !user
render json: {status: 'error', descr: 'INVALID_U_TOKEN'}
return
end
user = find_user_for_user(user, params[:id])
if !user
render json: {status: 'error', descr: 'INVALID_USER_ID'}
return
end
render json: {status: 'ok', user: {email: user.email,
first_name: user.first_name,
last_name: user.last_name,
address: user.address,
country: user.country,
zip: user.zip,
city: user.city,
phone: user.phone,
company_name: user.company_name,
signature: user.signature,
lang:user.lang}}
end
def find_user_for_user(user, user_id)
users = users_for_user(user)
users.detect {|u| u.id == user_id.to_i}
end
def users_for_user(user)
users = []
case user.type
when 'Contractor'
users << user
user.contractorEs.each do |cne| users << cne end
user.customers.each do |cs| users << cs end
user.customerEs.each do |cse| users << cse end
else
users << user.contractor
user.contractor.contractorEs.each do |cne| users << cne end
user.contractor.customers.each do |cs| users << cs end
user.contractor.customerEs.each do |cse| users << cse end
end
users
end
问题是
数据实际上是{“status”=>“error”,“descr”=>“INVALID\u USER\u ID”}
我知道你在九个月的时间里问了21个问题,所以如果下面的问题看起来很简单,我很抱歉,但是考虑到你的问题和你的评论,我觉得这是我能给出的唯一答案
规范的StackOverflow问题提供了一些代码、对特定结果的期望或期望以及与该结果不同的一些输出。一个问题被隐式或显式地提出,即为什么输出与愿望或期望不同
在您的例子中,您已经提供了一些代码、期望(没有错误)和一些明确的问题
然而,尽管有两个用户试图帮助您,但您还没有提供所获得的输出。第一个问题是“您得到了什么错误或异常”?第二个人问:“你犯了哪些错误?”?你对这两个问题的回答都是“我的show user方法失败了,很多逻辑都在哪里”。这没有提供任何细节和输出
在Ruby中,当发生错误时,通常会得到一些错误消息和堆栈跟踪,后者提供“面包屑跟踪”,告诉您通过所进行的一系列方法调用执行的是什么软件。对于每个方法,都会给出源文件和源文件中的行号。通常,如果要找出错误发生的位置,可以查看堆栈中每个位置周围的代码。如果您试图获得问题的帮助,您通常需要共享与每个职位相关的代码(例如,您在该职位的方法的代码)。你一点也没做过
对于您的具体情况,您说过,当您向设置中添加分配时,您的代码失败,形式如下:
@customer_e = FactoryGirl.create :customer_e
然后你接着说:
然后我的一些测试失败了。为什么会这样?我在中不使用@customer\u e
所有案例
添加您的评论:
我的show user方法下,很多逻辑在哪里
在没有输出或代码的情况下,无法提供代码“失败”的具体原因,但我们可以提供一个通用的答案
您的代码失败,因为存在一些条件逻辑,如果您包含的附加代码已被执行,这些条件逻辑的行为会有所不同(例如,show
方法中的代码取决于定义的@customer\e
)
并非所有情况下都使用@customer\u e
这一事实并不相关,因为只需使用一次就会导致错误。测试如何失败?你得到了什么错误或异常?你得到了什么错误?我的show user方法失败了,有很多逻辑仍然没有提供错误消息或堆栈跟踪。你说“数据是…”,但你没有说你在谈论什么数据,也没有说故障发生在代码中的什么地方。在这一行中,错误发生assert_equal@contractor.email,data['user']['email']
。这个断言没有通过,数据
包含{“status”=>“error”,“descr”=>“INVALID\u USER\u ID”}
我担心我的保密协议,但我已经编辑了我的帖子