Note that there are some explanatory texts on larger screens.

plurals
  1. PORSpec Request Spec Testing Model Attribute
    primarykey
    data
    text
    <p>I have the following Rspec file:</p> <pre><code>describe "Cart" do before do @user = FactoryGirl.create(:user) @cart = @user.carts.create! end describe "using stripe" do before do @sport = FactoryGirl.create(:sport) end describe "user adds sport to cart" do before do visit sports_path click_link "Add to Cart" end it "should be checkout page" do page.should have_content("Total") end describe "user clicks checkout" do before do click_button "Checkout" end it "should redirect user to sign in form" do page.should have_selector('h2', text: "Sign in") end describe "user logs on" do before do fill_in "Email", with: @user.email fill_in "Password", with: @user.password click_button "Sign in" end it "should be on checkout page" do page.should have_selector('h2', text: "Checkout") end describe "user fills in form", js: true, driver: :webkit do describe "everything valid" do before do fill_in "card-number", with: 4242424242424242 fill_in "card-expiry-month", with: 12 fill_in "card-expiry-year", with: 2015 fill_in "card-cvc", with: 123 click_button "Submit Payment" end it "should redirect to confirmation page" do page.should have_content("Confirmation") end it "should have the total price listed" do page.should have_content(@cart.total_price) end it "should create a stripe customer and save that to the stripe_customer_id of the user" do @user.stripe_customer_id.should_not be_nil end describe "should allow user authorize charge" do before do click_button "Confirm and Purchase" end it "should be back to sports page" do page.should have_content("Select a Sport") end end end end end end end end </code></pre> <p>So a user (created by FactoryGirl) buys something from my site.</p> <p>The <code>should create a stripe customer and save that to the stripe_customer_id of the user</code> is failing (<code>@user.stripe_customer_id</code> is <code>nil</code>).</p> <p>The controller has this method:</p> <pre><code>def confirmation @cart = current_cart customer = Stripe::Customer.create(description: current_user.email, card: params[:stripeToken]) current_user.update_attributes(stripe_customer_id: customer.id) end </code></pre> <p>I know the current_user (the same user from FactoryGirl for the tests) is being updated with the <code>stripe_customer_id</code> because the other tests are working.</p> <p>I assumed I would have to update the model somehow, because I was directly affecting the database (@user and current_user reference the same db entry, but are not the same object). So I tried calling <code>@user.reload</code> before checking if the <code>stripe_customer_id</code> was nil, but the test still failed.</p> <p>2 questions: Should I even be checking model attributes in a request spec? And, is there a way I can get the failing test to pass?</p> <p>Thanks</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload