Изменить здесь:
var dice = require('./dice');
var die = dice.game; // not die.die
Я думаю, это потому, что мои модели и их атрибуты уже импортированы и оценены перед выполнением моего теста, поэтому макет здесь бесполезен.
blockquote>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
и временных метках в тесте, так как кажется, что важно убедиться, что имя было установлено правильно.