我正在尝试在我正在处理的 flex 项目中模拟 FileReference。
删除一些属性,例如名称和大小可以正常工作,但数据只是拒绝工作。这是说明问题的代码:
[Test]
public function FileReferenceMockTest():void {
var frMock:FileReference = nice(FileReference);
var bytes:ByteArray = new ByteArray();
stub(frMock).getter("data").returns(bytes);
stub(frMock).getter("name").returns("filename");
assertThat(frMock.name, equalTo("filename")); // works
assertThat(frMock.data, sameInstance(bytes)); // Fails and says that frMock.data is null
}
如果我设置断点并在调试器中检查 frMock,它看起来像这样:
frMock
[inherited]
data = null
creationDate = null
creator = null
modificationDate = null
name = "filename"
__proxy__ = InterceptorProxyListener
...
如您所见,模拟对数据的处理方式不同。
几个小时以来,我一直在努力解决这个问题,并且真的可以使用一些帮助来解决这个问题。
更新:
代码在作为 Flex 库项目或 Flex 项目 (Air) 运行时工作。当代码在浏览器插件中运行时,它会失败。检查库项目中的调试器还显示数据属性未嵌套在 [Inherited] 内,而是与其他属性处于同一级别。
更新:
我在使用 URLLoader 时遇到了同样的问题,但这次正好相反。只有在浏览器插件中运行测试时,才能模拟 URLLoader。
由于我正在创建一个类来处理本地和远程文件加载,使用 FileReference 或 URLLoader,取决于输入,我有效地阻止了对这个类进行完全的单元测试。:(