Макет атрибута по умолчанию SQLAlchemy

Изменить здесь:

var dice = require('./dice');
var die = dice.game; // not die.die
1
задан ncrocfer 18 January 2019 в 17:45
поделиться

1 ответ

Я думаю, это потому, что мои модели и их атрибуты уже импортированы и оценены перед выполнением моего теста, поэтому макет здесь бесполезен.

Close: вы передали ссылку на функцию get_uuid() по умолчанию на id, а результат вызова get_now() (объекта выражения функции) по умолчанию на created_at. Изменение того, с чем связаны эти имена в модуле после факта, больше не влияет на столбцы, которые уже содержат ссылки на сами объекты.

В случае get_uuid() вы должны смоделировать вызываемую им функцию:

mock = mocker.MagicMock(return_value='123e4567-e89b-12d3-a456-426655440000')
mocker.patch('uuid.uuid4', mock)

, а в случае get_now() вы должны не вызывать ее во время построения модели:

class BaseModel(db.Model):
    ...
    created_at = db.Column(..., default=get_now, ...)

, чтобы вы снова могли смоделировать фактическую функцию, которую она вызывает:

mock = mocker.MagicMock(return_value=datetime.datetime(2019, 1, 1))
mocker.patch('sqlalchemy.func.now', mock)

С другой стороны, возможно, вам не следует ничего утверждать о id и временных метках в тесте, так как кажется, что важно убедиться, что имя было установлено правильно.

0
ответ дан Ilja Everilä 18 January 2019 в 17:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: