我有一些测试模型: 用户
FactoryGirl.define do
factory :user do
first_name {generate :name}
last_name {generate :name}
address {generate :string}
country {generate :string}
zip {generate :string}
city {generate :string}
phone {generate :string}
company_name {generate :string}
signature {generate :string}
v_token {generate :string}
password_digest {generate :password_digest}
email {generate :email}
lang 'en'
theme 'air'
end
end
承包商
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
和CustomerE
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_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
我的find_user_for_user方法:
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
我的测试:
test "should show user" do
get :show, :u => @contractor.u_token, :id => @contractor.id
assert_response :success
json = response.body
data = JSON.parse(json)
assert_equal @contractor.email, data['user']['email']
assert_equal 2, data.length
end
问题是data
是实际的{"status"=>"error", "descr"=>"INVALID_USER_ID"}
答案 0 :(得分:1)
我看到你在九个月内问了21个问题,所以如果以下内容看起来很简陋,我会道歉,但鉴于你的问题和评论,我觉得这是我能给出的唯一答案。
规范的StackOverflow问题提供了一些代码,对特定结果的期望或期望以及与该结果不同的一些输出。关于为什么输出与期望或期望不同,要么隐含地或明确地提出一个问题。
在您的情况下,您提供了一些代码,期望(没有错误)以及一些明确的问题。
但是,尽管有两个用户试图帮助您,但您还没有提供您获得的输出。第一个问“你得到什么错误或例外”?第二个问道,“你得到哪些错误”?你回答的都是“我的show user方法失败,其中有很多逻辑在哪里”。这没有提供细节,也没有输出。
在Ruby中,当发生错误时,您通常会收到一些错误消息和堆栈跟踪,后者提供“痕迹痕迹”,告诉您通过您正在进行的任何方法调用执行的软件。每个方法都给出了源文件和源文件中的行号。通常,如果要查找错误发生的位置,请查看堆栈中每个位置周围的代码。如果您正试图获得有关问题的帮助,则通常需要共享与每个职位相关的代码(例如,代码形成您在该职位所处的方法)。你没有做过这些。
至于您的具体情况,您已经说过,当您在设置中添加作业时,您的代码会失败:
@customer_e = FactoryGirl.create :customer_e
然后你继续说:
然后我的一些测试失败了。为什么会这样?我不会在@customer_e中使用 所有情况。
添加您的评论:
我的show user方法落在哪里,其中有很多逻辑
如果没有输出或代码,则无法提供有关代码“失败”原因的具体原因,但我们可以提供通用答案。
您的代码失败,因为存在一些条件逻辑,如果您执行的其他代码已被执行(例如,show
方法中的代码依赖于@customer_e
被定义),则其行为会有所不同
所有案例中未使用@customer_e
这一事实无关紧要,因为它只会使用一个来导致错误。