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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/8004A377-5FB4-4F70-A740-C2F70E8F09B2%40pobox.com.

Reply via email to