在Jasmine Karma测试中读取文件

时间:2014-07-15 16:16:11

标签: angularjs jasmine karma-runner

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

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

1 个答案:

答案 0 :(得分:5)

这很痛苦,因为当你进入你的安全带时,你处于沙盒浏览器的土地上,你无法轻易地访问外部文件。 Karma基本上创建了一个假的HTML页面包装器,它通过PhantomJS,Jasmine等加载到浏览器中进行测试。当你的测试工具开始运行时,那个浏览器已经运行了,开始做奇怪的事情为时已晚在系统层面。

你可以通过Karma配置中的'files'键来解决这个问题。您可以在此处添加测试夹具,Karma会将它们发送到页面中。当您进入二进制数据时,您需要做的是将构建任务转换为Javascript可以容忍的内容。通常,您将创建一个包含转义字符串(如Base64)的JSON文件,您可以将其解码回原始数据。

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