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.