【问题标题】:Loading test data from a CSV file从 CSV 文件加载测试数据
【发布时间】:2014-02-04 03:56:52
【问题描述】:

我正在为 AngularJS 应用程序进行单元测试。我有一个测试用例的 CSV 文件,我想将其放入一个特定的套件中,但我对 Jasmine、Karma 或 Node 不太熟悉,无法弄清楚如何做到这一点。我想我需要安装 csv 包,但是一旦完成,我就不清楚如何访问它。

csv 包的说明使用了 RequireJS,但我还没有看到将 RequireJS 集成到 angular-seed 中的代码示例。 Karma 网站上的This page 描述了与我目前使用的 angular-seed 完全不同的应用程序结构/流程。

编辑:感谢 marfarma 的回答,我已经安装了 karma-browserify,现在在我的休息情况下可以访问 node.js-style require。但是,文件系统似乎已损坏:

describe("MyController", function() {
    var fs = require('fs');
    console.log(fs, fs.readFile);
});

将打印:

LOG: Object{exists: undefined}, undefined

这是使用 PhantomJS 运行的 - 是不是我在编写测试以在浏览器中运行时无法访问文件系统?

【问题讨论】:

  • "是不是我在编写测试以在浏览器中运行时无法访问文件系统?" - 是的
  • 为我的答案添加了解决方法
  • @marfarma 谢谢!我会试试那个方法。我认为使用jasmine-node 进行测试会缓解这种情况,但我更喜欢karma,所以我只能硬着头皮。

标签: javascript angularjs jasmine karma-runner browserify


【解决方案1】:

您链接到的 csv 包需要使用 node.js 样式。 Browserify 支持在浏览器中使用它们。以下是一些关于 Browserify 和 Angularjs 的教程:

而且,由于您无法从浏览器直接从文件系统中读取数据,请将 csv 文件与 Angular 应用程序一起提供,例如:

var request = require('request');
var done = false;

request("http://localhost:8080/data.csv", function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // body is the csv data -- parse and save for later use
  }
  done = true;
})

waitsFor(function() {
  return done;
}, "csv data fetch never completed.", 10000);

// use it

describe('it should work',function() {
  ...
});

【讨论】:

  • 感谢您的提示。我已经开始集成karma-browserify,但它在我的测试套件中产生了一些问题。这个插件是否也需要我 browserify 我的常规应用程序源文件?
  • 具体来说,我对beforeEach(module('app')); 的调用以TypeError 失败,因此只有我对非Angular 实用程序的单元测试正在运行。
  • 好吧,我意识到module 是由browserify 定义的,它的定义是对Angular 模拟测试代码提供的module 函数的影子。我用angular.mock.module 替换了对module 的呼叫,一切正常!谢谢。
  • ...或者不是。请参阅我的编辑。我想我可能做错了。
猜你喜欢
  • 2021-05-07
  • 2011-01-26
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2021-11-06
  • 2020-06-11
  • 2019-01-31
  • 1970-01-01
相关资源
最近更新 更多