Я пытаюсь написать тесты для приложения без сервера, используя среду без сервера AWS. Я сталкиваюсь со странной проблемой. Всякий раз, когда я пытаюсь издеваться над S3 или DynamoDB, используя мото, это не работает. Вместо того, чтобы издеваться, вызов boto3 фактически переходит на мой аккаунт AWS и пытается что-то там сделать.
Это нежелательное поведение. Не могли бы вы помочь?
Пример кода:
import datetime
import boto3
import uuid
import os
from moto import mock_dynamodb2
from unittest import mock, TestCase
from JobEngine.job_engine import check_duplicate
class TestJobEngine(TestCase):
@mock.patch.dict(os.environ, {'IN_QUEUE_URL': 'mytemp'})
@mock.patch('JobEngine.job_engine.logger')
@mock_dynamodb2
def test_check_duplicate(self, mock_logger):
id = 'ABCD123'
db = boto3.resource('dynamodb', 'us-east-1')
table = db.create_table(
TableName='my_table',
KeySchema=[
{
'AttributeName': 'id',
'KeyType': 'HASH'
}
],
AttributeDefinitions=[
{
'AttributeName': 'id',
'AttributeType': 'S'
}
],
ProvisionedThroughput={
'ReadCapacityUnits': 1,
'WriteCapacityUnits': 1
}
)
table.meta.client.get_waiter('table_exists').wait(TableName='my_table')
table.put_item(
Item={
'id': {'S': id},
... other data ...
}
)
res = check_duplicate(id)
self.assertTrue(mock_logger.info.called)
self.assertEqual(res, True, 'True')
Пожалуйста, посмотрите приведенный выше код, я пытаюсь вставить запись в таблицу, а затем вызвать функцию, которая проверит, присутствует ли указанный идентификатор в таблице. Здесь я получаю таблицу ошибок уже существует, когда я запускаю этот код.
Если я отключаю сеть, я получаю сообщение об ошибке:
botocore.exceptions.EndpointConnectionError: Could not connect to the endpoint URL: "https://dynamodb.us-east-1.amazonaws.com/"
Я не понимаю, почему происходит попытка подключиться к AWS, если мы пытаемся издеваться.