我正在开发一个Angular应用程序,我正在使用Jasmine编写单元测试和Karma作为测试运行器。
我们正在使用D3进行可视化。
我从后端服务接收文件“testData.csv”中的csv数据,并使用d3.csv(“testData.csv”)将CSV数据加载到变量中,例如“data”。然后使用d3.csv.parse(data)从CSV数据中获取JSON数组。
我想为这些编写单元测试,但它们都失败了。任何帮助都非常适合。
我的Karma conf:
files: [
'jquery-2.0.3/jquery.js',
'angular-1.2.4/angular.js',
'angular-1.2.4/angular-route.js',
'angular-1.2.4/angular-mocks.js',
'projectExternal/d3/d3.v3.min.js', // included D3 library
'scripts/**/*.js',
'test/unit/**/*.js'
],
我的Jasmine单元测试:
'use strict';
describe('D3 Page', function () {
var ctrl = null;
var scope = null;
var data;
var dataJson;
// load the controller's module
beforeEach(module('app'));
beforeEach(inject(function ($controller, $rootScope, $injector, $compile) {
scope = $rootScope.$new();
ctrl = $controller('D3Ctrl', {
$scope: scope
});
}));
afterEach(function() {
});
it('should parse csv data', function(){
expect(d3.csv).toBeDefined(); // passes
d3.csv("testData.csv", function(dataset) {
console.log("CSV data is: " + dataset); // prints null
data = dataset;
});
console.log(data); // prints null
var ds = d3.csv.parse(data);
expect(ds.length).toBe(3); // prints ds.length = 0, fails Expected 0 to be 3
// console.log(ds); // prints null
});
});
答案 0 :(得分:2)
d3.csv
是异步的,所以你需要以这种方式处理它。
尝试这样的事情:
it('should parse csv data', function(){
expect(d3.csv).toBeDefined(); // passes
d3.csv("/absolute/path/to/testData.csv", function(error, dataset) {
if (error) {
console.log("Error: " + error);
} else {
console.log("Data: " + data);
}
console.log("CSV data is: " + dataset); // prints null
data = dataset;
console.log(data); // prints null
var ds = d3.csv.parse(data);
expect(ds.length).toBe(3); // prints ds.length = 0, fails Expected 0 to be 3
});
});