Moto не издевается над базой данных должным образом

#amazon-dynamodb #moto

#amazon-dynamodb #мото

Вопрос:

Что я здесь делаю не так? Это мой первый раз, когда я использую moto, и я действительно сбит с толку

conftest.py:

 @pytest.fixture(scope='module') def dynamodb(aws_credentials):  with mock_dynamodb2():  yield boto3.resource('dynamodb', region_name='us-east-1')   @pytest.fixture(scope='module') def dynamodb_table(dynamodb):  """Create a DynamoDB surveys table fixture."""  table = dynamodb.create_table(  TableName='MAIN_TABLE',  KeySchema=[  [..]  table.meta.client.get_waiter('table_exists').wait(TableName='MAIN_TABLE')  yield   

тестовый файл:

 mport json import boto3 from moto import mock_dynamodb2     @mock_dynamodb2 def test_lambda_handler(get_assets_event, dynamodb, dynamodb_table):  from [...] import lambda_handler  dynamodb = boto3.client('dynamodb')   response = lambda_handler(get_assets_event, "")  data = json.loads(response["body"])   assert response["statusCode"] == 200  assert "message" in response["body"]  assert data["message"] == "hello world"  # assert "location" in data.dict_keys()  

Но проблема в том, что моя лямбда использует помощника, у которого под капотом есть помощник dynamodb, и этот dbhelper запускается следующим образом:

  dynamodb = boto3.resource('dynamodb') table = dynamodb.Table(os.environ.get('MAIN_TABLE'))   def read_item(key: Dict):  try:  return table.get_item(Key=key)   except ClientError as e:  logging.exception(e)  raise exceptions.DatabaseReadException(f"Error reading from db: {key}") from e   

Разве над этим вообще можно так издеваться? Мне кажется, что когда я импортирую обработчик лямбда, он пытается перезаписать мою издевательскую базу данных, но не может, потому что, очевидно, нет переменной среды os с именем таблицы.

Комментарии:

1. Если имя таблицы должно быть переменной среды, имеет смысл сделать и эту часть теста. Вы можете использовать mock.patch , чтобы временно издеваться над этим env var на время test_lambda_handler : @mock.patch.dict(os.environ, {"MAIN_TABLE": "table_name"})

2. Не могли бы вы подробнее объяснить, что происходит не так? Какие ошибки вы получаете?

3. да, я думаю, что у меня есть это для работы с ` monkeypatch.setenv(‘MAIN_TABLE’, ‘MAIN_TABLE’) ` внутри теста 🙂