moto sns клиент не может заставить работать публикацию AttributeError: у объекта 'sns.ServiceResource' нет атрибута 'publi sh' - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь издеваться над мотоциклом. использование примеров из документации с pytest.

sns.create_topi c () работает, а sns.publi sh () - нет. Из документации boto я должен иметь возможность вызывать publi sh () следующим образом

@pytest.fixture()
def aws_credentials():
    """Mocked AWS Credentials for moto."""
    os.environ["AWS_ACCESS_KEY_ID"] = "testing"
    os.environ["AWS_SECRET_ACCESS_KEY"] = "testing"
    os.environ["AWS_SECURITY_TOKEN"] = "testing"
    os.environ["AWS_SESSION_TOKEN"] = "testing"


@pytest.fixture()
def sts(aws_credentials):
    with mock_sts():
        yield boto3.client("sts", region_name="us-east-1")


@pytest.fixture
def sns(aws_credentials):
    with mock_sns():
        yield boto3.resource("sns", region_name="us-east-1")

@mock_sts
def test_publish(sns):
    resp = sns.create_topic(Name="sdfsdfsdfsd")
    mesg = {"TopicArn": "arnsdfsdf", "Message": "sdfsdfsdfsd"}
    response = sns.publish(mesg)

Я получаю следующую ошибку: AttributeError: у объекта 'sns.ServiceResource' нет атрибута 'publi sh'

moto не поддерживает publi sh? Я хотел бы, чтобы он подтвердил, что вызов, сделанный для publi sh (), действителен для тех, кто не хочет вносить изменения в publi sh

1 Ответ

0 голосов
/ 07 апреля 2020

SNS использует клиент boto3 вместо ресурса. Поэтому измените это:

with mock_sns():
    yield boto3.resource("sns", region_name="us-east-1")

на следующее:

with mock_sns():
    yield boto3.client("sns", region_name="us-east-1")

, и оно должно работать.

Пример теста: https://github.com/spulec/moto/blob/master/tests/test_sns/test_publishing_boto3.py#L28

...