My merge test case (Assesment -1)

I am having trouble understanding one of the test cases for the my_merge portion of Assesment -1:

  it 'yields each element to the block' do 
      test_hash_1 = { a: 10, b: 2 }
      test_hash_2 = { b: 3, c: 4 }
      expect { |b| test_hash_1.my_merge(test_hash_2, &b)}.to yield_successive_args([:b, 2, 3])
  end

Specifically I don’t understand the syntax of the following line and can’t figure out how to run it in order to test it myself:

expect { |b| test_hash_1.my_merge(test_hash_2, &b)}.to yield_successive_args([:b, 2, 3])

(There is a similar test case for the my_select method)

The test is checking to see that at some point your my_merge method yields to the block passed to it, and specifically that the yield takes the arguments :b, 2, and 3. The :b, 2, 3 come from the way my_merge is supposed to handle conflicts between the two hashes. :b is the key with the conflict, 2 is the value of :b in the first hash, and 3 is the value of :b in the second hash. So :b, 2, 3 are the arguments given to the block that resolves the conflict.