Thanks, Phil. I’m going to have to spend some time groking pry so I can add it to my box of tools.
The underlying issue turned out to be a timing problem that was easily solved by adding “wait_for_ajax” after the #drag_to call. > On Apr 5, 2021, at 10:50 AM, Phil Pirozhkov <pirjs...@gmail.com> wrote: > > You can check by using `STDOUT.puts` if you're debugging. > I personally prefer sticking `binding.pry` here and there from `pry-byebug` > gem > > On Mon, Apr 5, 2021 at 6:42 PM Jack Royal-Gordon <jac...@pobox.com> wrote: >> >> In troubleshooting a system test that is failing, the debugging output from >> my controller is mixed in with RSpec’s output. I’m guessing that has to do >> with RSpec capturing terminal output, but it has me wondering if the test is >> failing before the code has a chance to complete. >> >> The test is of a drag-and-drop operation on screen that results in an Ajax >> call to the app, followed by activity on screen once the Ajax call completes >> successfully. The ajax call deletes one record and moves it’s children to >> another record. I added two debugging statements: one at the beginning of >> the controller action, dumping the params, and the other after the database >> changes have been made, stating that the parent record has been deleted. The >> output looks as follows: >> >> Source = 38347; target = 38360 >> F >> >> >> Failures: >> >> 1) SKUs Screen Draggable and Droppable actions when dragging and droppng a >> book on another book with confirmation updates the database correctly >> Failure/Error: expect(source.reload).to be_destroyed, "Source book not >> destroyed" >> Source book not destroyed >> >> params: <ActionController::Parameters {"verb"=>"MoveBook", >> "source_id"=>"book_38347", "dest_id"=>"book_38360", "ts"=>"1617589502334", >> "controller"=>"books", "action"=>"modify", "format"=>"js"} permitted: false> >> book deleted >> [Screenshot]: >> tmp/screenshots/failures_r_spec_example_groups_sk_us_screen_draggable_and_droppable_actions_when_dragging_and_droppng_a_book_on_another_book_with_confirmation_updates_the_database_correctly_752.png >> >> >> The green highlighted text is output by the test spec before it really gets >> going. The other two highlighted segments of text are the two >> troubleshooting outputs from the controller action called via Ajax. Note >> that they are output after the failure message and before the screen shot >> message. I find this extremely suspicious. Can I conclude from this that the >> test failed before the controller action had a chance to run? >> >> FWIW, here is the test (there is other setup code above this, but nothing >> that should affect the flow through the test (the second “it” is the one >> causing the failure — the first one succeeds): >> >> describe "when dragging and droppng a book on another book" do >> let!(:source) { user.books.first } >> let!(:target) { user.books.second } >> let!(:source_control) { page.find("#book_#{source.id} .book_title >> label") } >> let!(:target_control) { page.find("#book_#{target.id}") } >> let!(:source_skus) { source.skus.map(&:id).to_set } >> let!(:target_skus) { target.skus.map(&:id).to_set } >> >> describe "with confirmation" do >> before do >> puts "Source = #{source.id}; target = #{target.id}" >> accept_confirm do >> source_control.drag_to(target_control) >> end >> end >> >> it 'changes the display correctly' do >> expect(page).to_not have_selector("#book_#{source.id}"), "Source >> book still exists on page" >> for sku in source.skus >> expect(page).to have_selector("#book_#{target.id} >> #sku_#{sku.id}"), "Source SKU not found within target book" >> end >> end >> >> it 'updates the database correctly' do >> expect(source.reload).to be_destroyed, "Source book not destroyed" >> new_target_skus = target.skus.reload.map(&:id).to_set >> expect(new_target_skus).to include(*source_skus), "Some Source SKUs >> not moved to target" >> expect(new_target_skus).to include(*target_skus), "Some target SKUs >> lost during the move" >> end >> end >> >> Note: When the drop occurs, a “confirm” modal dialog is displayed requiring >> the user to confirm the operation. >> >> -- >> 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 rspec+unsubscr...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/rspec/8004A377-5FB4-4F70-A740-C2F70E8F09B2%40pobox.com. > > -- > 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 rspec+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/rspec/CAAk5Ok_K4taBvMDAN4%2BrLPQJxy57AFo6VPmvc6yzgNmbw%2BQVBQ%40mail.gmail.com. -- 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 rspec+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/E75496D4-BA97-4519-8433-C65162B7CDBA%40pobox.com.