Я пытаюсь протестировать библиотеку, которая использует майя scriptJobs
и повторно отправляет их в виде сигналов Qt. Я сталкиваюсь с проблемой, когда я не могу проверить, правильно ли отправлен сигнал, потому что сценарии Maya ScriptJob не работают до тех пор, пока майя не выполнит все тестовые функции.Как управлять, когда Maya выполняет scriptJobs?
Этот тест не будет выполнен, так как обработчик не вызывается до проверки call_count
.
from mock import Mock
from maya import cmds
def test_func():
cmds.currentTime(1)
handler = Mock()
cmds.scriptJob(e=('timeChanged', handler))
# This should trigger the scriptJob, and thus, call the handler
# but it doesn't until all python is finished executing.
cmds.currentTime(2)
assert handler.call_count == 1
Если я определить обработчик в качестве глобальной переменной, а затем сделать тест на два этапа, где я бегу test_one()
сам по себе, пусть это полная, а затем запустить test_two()
, он работает.
handler = Mock()
def test_one():
cmds.currentTime(1)
cmds.scriptJob(e=('timeChanged', handler)
cmds.currentTime(2)
def test_two():
assert handler.call_count == 1
Есть в любом случае, чтобы заставить Maya обрабатывать scriptJobs
Теперь, вместо того, чтобы ждать, пока все питоны не закончили выполнение? Или, может быть, есть лучший способ проверить это?
Спасибо. Да, 'processIdleEvents()', похоже, не заставляет его, возможно, придется переосмыслить, как я его тестирую. –