У меня есть некоторые тестовые модели: ПользовательСтранное поведение завода девушки
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
во всех случаях.
EDITED: Хорошо, мой метод показать пользователю:
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
actualy {"status"=>"error", "descr"=>"INVALID_USER_ID"}
Как проходят тесты? Какую ошибку или исключение вы получаете? – janfoeh
какие ошибки вы получаете? –
мой метод отображения пользователя падает, где много логики, где – cnaize