私は統合テストを行っていますが、なぜ合格していないのかわかりません。私の実装は私のコントローラ内でやりたいやり方で動作し、私の他のすべてのテストはやや同じように書かれています。実装時に統合テストが失敗する
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
サイトの基本的な機能は、ユーザーが、彼らはチケットを購入するために使用できるトークンの任意の番号を持っています。ユーザーがチケットを購入すると、チケットの価格でユーザートークンを減らす必要があります。これは、私がサイト上でそれをしたいと思うように動作します、私はスイートを構築するためのテストをしたいだけです。 binding.pryと検索の何百もの後、私はポストリクエストから返ったときに、ユーザーが50トークン(ユーザーフィクスチャ内で設定された数)に戻るのがなぜわからないのですか?私は40に、コントローラにユーザーのトークンの減少をデバッガを置くが、私はassert_difference
の終了前に、POSTリクエストの後にデバッガを置けば、それは戻って50
編集するなら:更なるテストの後
Iそれでも、これを動作させることはできません。私はテストに--verbose
タグを実行した場合、それは私が誤ってalt
+ space
を使用し、異なるUnicodeのスペースを追加した場合、私は考えることができる唯一の事だった熊手を中止し
NameError: undefined local variable or method `√' for main:Object
を返します。コントローラを再入力して確認しましたが、これで問題は解決しませんでした。
私は今、問題を引き起こしている私の形になると思っています。
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'
エラーの原因となっているhidden_field_tagsか、UTF8エンコーディングかどうかと思います。私は困惑している。ただ、何が起こるかを見るために
はまだ動作しませんです。 current_userは単に 'current_user = session [:user_id]'を設定したメソッドなので、これは実際にコードのロジックを変更するものではありません。 –