UsageΒΆ

To use Allows in a project:

from unittest.mock import Mock

from allows import allow, receive_method

my_mock = Mock()
allow(my_mock).to(
    receive_method('spam')
    .called_with(eggs='foo')
    .and_return_value('bar')
)
allow(my_mock).to(
    receive_method('spam')
    .called_with(eggs='no thanks')
    .and_return_value('ok')
)

assert my_mock.spam(eggs='foo') == 'bar'
assert my_mock.spam(eggs='no thanks') == 'ok'

Allows specifies a similar grammar to Rspec to set up Mocks for tests. This allows complex side effects to be constructed more easily than with the standard Mock API.

Allows can be used without the grammar to build and compose side effects as well.

from unittest.mock import Mock, call

from allows import SideEffect, SideEffectBuilder

side_effect = SideEffectBuilder() \
    .with_return_value('bar') \
    .with_call_args(eggs='foo')

args = call(eggs='no thanks')
effect = lambda *args, **kwargs: 'bar'
another_side_effect = SideEffect(args, effect)

side_effect.merge(another_side_effect)

my_mock = Mock()
my_mock.spam.side_effect = side_effect

assert my_mock.spam(eggs='foo') == 'bar'
assert my_mock.spam(eggs='no thanks') == 'ok'