ruby unit-testing mocking block rr

Unidad de prueba Ruby Blocks por Mocking con rr(era flexmock)



unit-testing (2)

Primero, puede escribir esto un poco más simple: su prueba con RR no es un puerto directo de su prueba usando FlexMock. Segundo, no estás probando lo que sucede dentro del bloque para que tu prueba esté incompleta. Pruebe esto en su lugar:

describe ''#update_config'' do it ''makes a YAML::Store and stores A in it within a transaction'' do mock_store = {} mock(mock_store).transaction.yields mock(YAML::Store).new { mock_store } update_config expect(mock_store[''A'']).to eq ''a'' end end

Tenga en cuenta que dado que proporciona la implementación de #transaction, no solo el valor de retorno, también podría haberlo dicho de esta manera:

describe ''#update_config'' do it ''makes a YAML::Store and stores A in it within a transaction'' do mock_store = {} mock(mock_store).transaction { |&block| block.call } mock(YAML::Store).new { mock_store } update_config expect(mock_store[''A'']).to eq ''a'' end end

¿Cómo pruebo la unidad lo siguiente?

def update_config store = YAML::Store.new(''config.yaml'') store.transaction do store[''A''] = ''a'' end end

Aquí está mi comienzo:

def test_yaml_store mock_store = flexmock(''store'') mock_store .should_receive(:transaction) .once flexmock(YAML::Store).should_receive(:new).returns(mock_store) update_config() end

¿Cómo pruebo qué hay dentro del bloque?

ACTUALIZADO

Convertí mi prueba en especificaciones y cambié al marco de burla rr:

describe ''update_config'' do it ''calls transaction'' do stub(YAML::Store).new do |store| mock(store).transaction end update_config end end

Esto probará que se llamó la transacción. ¿Cómo realizo la prueba dentro del bloque: store[''A''] = ''a'' ?


Desea llamar rendimientos :

describe ''update_config'' do it ''calls transaction which stores A = a'' do stub(YAML::Store).new do |store| mock(store).transaction.yields mock(store).[]=(''A'', ''a'') end update_config end end

Vea esta respuesta para un acercamiento diferente a una pregunta relacionada. Esperemos que la documentación de rr api mejore.