In addition to what Joseph said Look into Dual Booting the app when doing large upgrade work like you are
See https://github.com/Shopify/bootboot and the link in the README for the conference talk, really good info On Friday, April 10, 2020 at 1:15:33 PM UTC-7, Jack R-G wrote: > > I have a test for a controller that receives uploaded files, and I’ve > gotten past a lot of obstacles, but I’ve got one that I just can’t > understand. Using RSpec 2.12, Ruby 2.0.0, Rails 3.2.21. > > Code from spec/controllers/auto_controller.rb: > > … > describe AutoController do > GoodEmails.each_with_index do | params, ix | > before(:each) do > Upload.delete_all > Log.delete_all > post :create, params > end > it "Valid posts for good email #{ix}" do > response.code.should eq "201" > Upload.count.should eq 1 > Log.count.should eq 1 > Log.last.message.should match(/Kobo Sales Upload/) > end > end > … > > > Some of the code from app/controllers/auto_controller.rb: > > def create > begin > for i in (1 .. params[:attachments].to_i) > attachment = params["attachment#{i}"] > if attachment.present? && > attachment.original_filename.is_a?(String) && > attachment.original_filename.split(".").last == 'zip' > upload = Upload.create!(filename: attachment.original_filename, > content: attachment.read, uploaded_at: Time.now, file_descr: > params[:subject] ) > Log.log_message("Sales Upload #{upload.id} received > (#{params[:subject]})", distributor_id: distributor_id, task: 'auto’, data: > {params: clean(params)}) > end > end > render status: :created, nothing: true > rescue StandardError > render status: :created, nothing: true > Log.log_message("Bad email received; subject: #{params[:subject]}", > data: {params: clean(params)}) > end > end > > I’m getting the test rejected message: > Failure/Error: Upload.count.should eq 1 > > expected: 1 > got: 0 > > (compared using ==) > > > When I set a breakpoint at the end of the controller code, I see that > response.code = 201, Upload.count = 1, Log.count = 1, and Log.last.message > = "Kobo Sales Upload” > > However, when I set a breakpoint in the spec file right inside the “it” > block, I see response.code = 201, Upload.count = 0, and Log.count = 0. > > My expectation was that the “before(:each)” would run before each test, so > that I would see a break in the spec, then four breaks in the controller, > then a break in the spec and four more breaks in the controller. Ideally, I > would like to run the before code once, then perform the four tests on the > result, and then iterate for the second GoodEmail. I think that I could > accomplish that by using “before(:all)”, but apparently you cannot put a > “post” command inside a before(:all) block, so I can’t do that. > > So, I have two questions: > 1) Why aren’t the database records still there when I get to the “it” > block? > 2) Is there a “more correct way ” (in terms of RSpec best practices) to > structure this test sequence? > > -- You received this message because you are subscribed to the Google Groups "rspec" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/57efb04b-6dea-4dff-b26a-b0b07e2978bc%40googlegroups.com.
