RSpec Specification Test Model Attribute
I have the following Rspec file:
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
So a user (created by FactoryGirl) buys something from my site.
should create a stripe customer and save that to the stripe_customer_id of the user
The controller has this method:
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
I know the current_user (the same user from FactoryGirl for tests) is updated with
because other tests are working.
I assumed that I would have to update the model somehow, because I was directly acting on the database (@user and current_user refer to the same db entry, but not the same object). So I tried to call
before checking if the value was
zero, but the test still failed.
2 questions: Should I even validate model attributes in the request spec? And, is there a way that I can pass the failure test?
source to share