2016-02-12 1 views
0

Я пытаюсь протестировать библиотеку, которая использует майя 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Теперь, вместо того, чтобы ждать, пока все питоны не закончили выполнение? Или, может быть, есть лучший способ проверить это?

ответ

1

ScriptJobs не обрабатывается до тех пор, пока основной цикл майи не возобновится, что после завершения скрипта. Если вы хотите, чтобы он был синхронным, вам нужно вызвать функции напрямую. Вы можете попробовать вызвать utils.processIdleEvents(), чтобы убедиться, что это заставит scriptJobs запускать в режиме онлайн, но я не уверен, что это хорошая симуляция того, что вы тестируете.

+0

Спасибо. Да, 'processIdleEvents()', похоже, не заставляет его, возможно, придется переосмыслить, как я его тестирую. –

 Смежные вопросы

  • Нет связанных вопросов^_^