私はScriptProcess
、子プロセスへのインターフェースとして機能する、QML で使用することを意図した C++ クラスを作成しています。この子プロセスはスクリプトをロードし、オンデマンドで関数を実行します。関数を呼び出すと、結果 (値または例外) がシグナルを介して非同期に返されます。
import QtQuick 2.5
import QtTest 1.0
import dungeon 1.0
TestCase {
id: test
name: "ScriptProcessTest"
property ScriptProcess session: null
signal exceptionWhenLoadingCode(string type, int line, string message)
SignalSpy {
id: exceptionSpy
target: test
signalName: "exceptionWhenLoadingCode"
}
Component {
id: process
ScriptProcess {
id: script
onExceptionWhenLoadingCode: test.exceptionWhenLoadingCode(type, line, message)
}
}
function startScript(scriptUrl) {
var request = new XMLHttpRequest()
request.open("GET", "data/%1.js".arg(scriptUrl), false)
request.send(null)
return process.createObject(test, {code: request.responseText})
}
function cleanup() {
if (session) {
session.stop()
}
delete session
session = null
}
function test_syntaxErrorInGlobalContextIsReported() {
var count = exceptionSpy.count
session = startScript("syntax-error-in-global-context")
compare(exceptionSpy.count, count + 1)
}
function test_errorThrownInGlobalContextIsReported() {
var count = exceptionSpy.count
session = startScript("error-in-global-context")
compare(exceptionSpy.count, count + 1)
}
}
一言で言えば、私は次のことを行います。
- テストごとに、補助プロセスを開き、ファイルからスクリプトをロードします。これは
Component
、プロパティを介して指定されたスクリプトを使用して をインスタンス化することによって行われますScriptProcess.code
。 - テストを実行します。
- テストが終了したら、プロセスを強制終了し、それを管理するオブジェクトを削除します。
私の問題は、SignalSpy
呼び出されたexceptionSpy
ものがトリガーされていないことです。exceptionSpy.count
は常にゼロであり、その理由はわかりません。 これはなぜですか?私は誤用していますSignalSpy
かComponent
?