Bubble sort implementation with tests
Just a note about the tests: I'd create a test method for every assert call. For example, 

  def test_StackWithTwoElements
    stack = [2, 1]
    sorted_stack = [1, 2]
    assert_equal(sorted_stack, @sorter.sort(stack), "sorting stack with two elements: 1, 2 failed")
    stack = [2, "a"]
    assert_raise (ArgumentError) { @sorter.sort(stack) }
  end


would be

  def test_StackWithTwoElements
    stack = [2, 1]
    sorted_stack = [1, 2]
    assert_equal(sorted_stack, @sorter.sort(stack), "sorting stack with two elements: 1, 2 failed")
  end


  def test_StackWithInvalidElement
    stack = [2, "a"]
    assert_raise (ArgumentError) { @sorter.sort(stack) }
  end


Too many asserts in one test is a bad smell. It's Assertion Roulette and you lost Defect Localization. If the first  assert_equal throws an exception you don't know anything about the results of the other assert calls which could be important because they could help debugging and defect localization.