nvd3
Version:
A reusable charting library written in d3.js
151 lines (127 loc) • 4.71 kB
text/coffeescript
describe 'NVD3', ->
describe 'Line Chart', ->
sampleData1 = [
key: 'Series 1'
values: [
[-1,-1]
[ ]
[ ]
[ ]
]
]
sampleData2 = [
key: 'Series 1'
classed: 'dashed'
values: [
[-1,-3]
[ ]
[ ]
[ ]
]
,
key: 'Series 2'
values: [
[-1,-4]
[ ]
[ ]
[ ]
]
,
key: 'Series 3'
values: [
[-1,-5]
[ ]
[ ]
[ ]
]
]
options =
x: (d)-> d[0]
y: (d)-> d[1]
margin:
top: 30
right: 20
bottom: 50
left: 75
color: nv.utils.defaultColor()
height: 400
width: 800
showLegend: true
showXAxis: true
showYAxis: true
rightAlignYAxis: true
useInteractiveGuideline: true
noData: 'No Data Available'
duration: 0
clipEdge: false
isArea: (d)-> d.area
defined: (d)-> true
interpolate: 'linear'
builder = null
beforeEach ->
builder = new ChartBuilder nv.models.lineChart()
builder.build options, sampleData1
afterEach ->
builder.teardown()
it 'api check', ->
should.exist builder.model.options, 'options exposed'
for opt of options
should.exist builder.model[opt](), "#{opt} can be called"
builder.model.update()
it 'renders', ->
wrap = builder.$ 'g.nvd3.nv-lineChart'
should.exist wrap[0]
it 'no data text', ->
builder = new ChartBuilder nv.models.lineChart()
builder.build options, []
noData = builder.$ '.nv-noData'
noData[0].textContent.should.equal 'No Data Available'
it 'clears chart objects for no data', ->
builder = new ChartBuilder nv.models.lineChart()
builder.buildover options, sampleData1, []
groups = builder.$ 'g'
groups.length.should.equal 0, 'removes chart components'
it 'has correct structure', ->
cssClasses = [
'.nv-x.nv-axis'
'.nv-y.nv-axis'
'.nv-linesWrap'
'.nv-legendWrap'
'.nv-line'
'.nv-scatter'
'.nv-legend'
]
for cssClass in cssClasses
do (cssClass) ->
should.exist builder.$("g.nvd3.nv-lineChart #{cssClass}")[0]
it 'can override axis ticks', ->
builder.model.xAxis.ticks(34)
builder.model.yAxis.ticks(56)
builder.model.update()
builder.model.xAxis.ticks().should.equal 34
builder.model.yAxis.ticks().should.equal 56
it 'can add custom CSS class to series', ->
builder.updateData sampleData2
classed = builder.$ '.nv-linesWrap .nv-groups .nv-group.dashed'
classed.length.should.equal 2, 'dashed class exists'
scatter = builder.$ '.nv-scatterWrap .nv-groups .nv-group.dashed'
scatter.length.should.equal 1, 'one classed element is from scatter'
it 'shows focus chart when focusEnable is set to true', ->
builder.model.focusEnable(true).update();
focus = builder.$ '.nv-focusWrap .nv-focus'
should.exist focus[0]
it 'hides focus chart when focusEnable is set to false', ->
builder.model.focusEnable(true).update();
builder.model.focusEnable(false).update();
focusWrap = builder.$ '.nv-focusWrap'
focusWrap[0].style.display.should.equal 'none'
it 'does not reset selected focus range when focusEnable is set to false', ->
builder.model.focusEnable(true).update();
builder.model.brushExtent([0, 1]).update();
builder.model.focusEnable(false).update();
builder.model.brushExtent()[0].should.equal 0
builder.model.brushExtent()[1].should.equal 1