У меня есть интеграционный тест, который я не могу понять, почему он не проходит. Я чувствую, что моя реализация работает так, как я хочу, в моих контроллерах, и все мои другие тесты проходят, которые написаны несколько аналогично.Ошибка интеграции при выполнении работ
integration test:
def setup
@user = users(:hank)
@user2 = users(:phillip)
@item = items(:television)
end
test "should decrement users tokens when ticket is purchased" do
log_in_as @user
assert_difference "@user.tokens", -(@item.ticket_price) do
post tickets_path, user_id: @user.id, item_id: @item.id, ticket_number: 15
end
end
^Это та часть, которая выходит из строя, я взял остальное, чтобы держать его в чистоте
tickets_controller.rb
def create
@ticket = Ticket.new(ticket_params)
user = current_user
item = Item.find(params[:item_id])
if user.tokens >= item.ticket_price
if @ticket.save
# If I debug here and after the upd_att the functionality works. Users tokens are in fact decremented.
user.update_attribute(:tokens, (user.tokens - item.ticket_price))
flash[:success] = "Ticket successfully purchased."
redirect_to item_path(@ticket.item_id)
else
flash[:danger] = "Ticket already purchased. Please select another."
redirect_to item_path(@ticket.item_id)
end
else
redirect_to item_path(item.id)
end
end
^я расширил все мои методы, которые рефакторинг моего контроллера, мы надеюсь поймать, что это неправильно.
ticket's schema.rb
create_table "tickets", force: :cascade do |t|
t.integer "user_id"
t.integer "item_id"
t.integer "ticket_number", default: 0
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Основная функциональность сайта - пользователь имеет любое количество токенов, которые они могут использовать для покупки билетов. Когда пользователь покупает билет, он должен уменьшать токены пользователей по цене билета. Это работает так, как я хочу, чтобы это было на сайте, я просто хочу пройти тест на его сборку своего пакета. После сотен bind.pry и поиска я не знаю, почему, когда он возвращается из почтового запроса, пользователь возвращается к 50 токенам (число, установленное в пользовательском приборе). Если я ставлю отладчик в контроллере маркеров уменьшения пользователя до 40, но если я ставлю отладчик после запроса поста до конца assert_difference
он вернулся к 50.
EDIT:
После дальнейшего тестирования I все еще не может заставить это работать. Если я бег --verbose
тега на тесте она ликвидирует грабли и возвращает
NameError: undefined local variable or method `√' for main:Object
Единственным, что я мог думать, если бы я случайно использовал alt
+ space
и добавил другой Юникод пространства. Я вернул контроллер, чтобы быть уверенным, и это не решило проблему.
Теперь я думаю, что это может быть моя форма, которая вызывает проблемы.
show.html.haml
.purchase
= form_tag('/tickets') do
= hidden_field_tag 'user_id', @current_user.id if @current_user
= hidden_field_tag 'item_id', @item.id
= text_field_tag 'ticket_number', nil, placeholder: "Ticket Number"
= submit_tag 'Purchase'
Удивительно, что это скрытые_файлы, которые вызывают ошибку, или кодировку UTF8. Я в тупике.
Тем не менее не работает. Это никак не изменяет логику кода, так как current_user - это всего лишь метод, который я установил параметр current_user = session [: user_id] ' –