2014-07-15 67 views
3

我有一个服务在上传的文件上起作用。我有一个基本上传的上传(.xlxs)文件转换为工作簿的服务功能。我想为这个特定的函数编写测试用例。 (没有上传到服务器,但只是浏览器) 任何人都可以建议如何从单元测试场景内访问测试文件(如test_something.xlxs)。我想读取文件作为二进制字符串,并将对象传递给服务方法。在Jasmine Karma测试中读取文件

我使用的单元测试框架是Karma + Jasmine for angular。

回答

5

这是一种痛苦,因为当你进入安全带的时候,你在沙盒浏览器的土地上,你不能轻易地访问外部文件。 Karma通过基本上创建一个伪装的HTML页面包装器,通过PhantomJS,Jasmine等将其加载到浏览器中进行测试。当您的测试工具开始工作时,该浏览器已经运行,现在开始做出奇怪的事情为时已晚在系统级别。

您可以解决这个问题的方法是使用Karma配置中的'files'键。你可以在这里添加测试装置,Karma会将它们发射到页面中。当你进入二进制数据时,你必须做的是有一个构建任务把它转换成Javascript可以容忍的东西。通常,您将制作一个包含转义字符串(如Base64)的JSON文件,您可以将其解码回原始数据。

https://github.com/karma-runner/karma-ng-html2js-preprocessor Karma的HTML2JS预处理器做了一些非常相似的事情,并且可能是一个很好的起点。它旨在让您将HTML文件嵌入到测试工具中以用于各种目的,它通过执行相同的操作:在Karma启动之前将它们编码为可嵌入的格式。使用相同的机制,你可以嵌入几乎任何你想要的东西,如果你愿意用一些预处理代码弥合差距。

+0

我将不得不把excel文件转换成JSON第一?然后像这里提到的那样阅读它? http://stackoverflow.com/questions/17370427/loading-a-mock-json-file-within-karmaangularjs-test – sriram

+0

是的,无论如何这是常见的模式。尽管原始的XLS可能会令人沮丧,因为一旦你编码了它,那么呢?你可以解码它......但你不能用它调用Excel(除非你正在做一些奇怪的事情,比如从MSIE调用一个ActiveX对象?)。如果你想从原始JS访问这个你有没有考虑过CSV或类似的? –

+0

Excel分析器部分很好。我已经有了一个Excel解析器,这是我想单元测试的。如果我们包含在Karma中,我会看到该文件将被提供。不能,我们只是直接从茉莉花访问它? – sriram

相关问题