我正在尝试使用WebBrowser.ObjectForScripting
来“扩充”JavaScript。一段“扩充”JavaScript有一个函数,它接受一个对象,做一些事情,并调用该对象上提供的回调。我也希望快速失败并在回调不是函数时抛出异常,换句话说,我会写这样的东西(这是一个非常简单的例子,真正的函数验证可能包括它有{{ 1}}和apply
):
call
JavaScript世界中的调用如下所示:
[ComVisible(true)]
public class MyScriptingObject
{
public void Foo(dynamic obj)
{
Type objType = obj.GetType();
var toStringRes = objType.InvokeMember(
"toString",
System.Reflection.BindingFlags.InvokeMethod,
null,
obj,
null);
if (!toStringRes.StartsWith("function"))
{
throw new Error("`data.callback` must be a function");
}
//do something useful
obj.callback("some data");
}
}
我如何单元测试方法window
.external
.Foo(
{
callback: function (data) {
alert('That is what we have got from C# ' + data);
}
});
?我提供哪些测试数据?
最终,我想知道是否已调用Foo()
。但是,为了进入执行阶段,我们需要首先通过验证。
问题是传递数据的方式是obj.callback()
既是方法又有obj.callback
,可能还有toString()
。