nvd3
Version:
A reusable charting library written in d3.js
143 lines (121 loc) • 4.24 kB
text/coffeescript
describe 'NVD3', ->
describe 'Stacked Area Chart', ->
sampleData1 = [
key: 'Series 1'
values: [
[-1,-1]
[ ]
[ ]
[ ]
]
]
sampleData2 = [
key: 'Series 1'
values: [
[-1,-3]
[ ]
[ ]
[ ]
]
,
key: 'Series 2'
values: [
[-1,-4]
[ ]
[ ]
[ ]
]
]
options =
x: (d)-> d[0]
y: (d)-> d[1]
margin:
top: 30
right: 20
bottom: 50
left: 75
color: nv.utils.defaultColor()
showLegend: true
showControls: true
showXAxis: true
showYAxis: true
rightAlignYAxis: false
useInteractiveGuideline: true
noData: 'No Data Available'
duration: 0
controlLabels:
stacked: 'Stacked'
stream: 'Stream'
expanded: 'Expanded'
builder = null
beforeEach ->
builder = new ChartBuilder nv.models.stackedAreaChart()
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"
it 'renders', ->
wrap = builder.$ 'g.nvd3.nv-stackedAreaChart'
should.exist wrap[0]
it 'clears chart objects for no data', ->
builder = new ChartBuilder nv.models.stackedAreaChart()
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-stackedWrap'
'.nv-legendWrap'
'.nv-controlsWrap'
'.nv-interactive'
]
for cssClass in cssClasses
do (cssClass) ->
should.exist builder.$("g.nvd3.nv-stackedAreaChart #{cssClass}")[0]
it 'formats y-Axis correctly depending on stacked style', ->
chart = nv.models.stackedAreaChart()
chart.yAxis.tickFormat (d)-> "<#{d}>"
builder = new ChartBuilder chart
builder.build options, sampleData1
yTicks = builder.$ '.nv-y.nv-axis .tick text'
yTicks.should.have.length.greaterThan 2
for tick in yTicks
tick.textContent.should.match /<.*?>/
chart.dispatch.changeState
style: 'expand'
chart.stacked.style().should.equal 'expand'
newTickFormat = chart.yAxis.tickFormat()
newTickFormat(1).should.equal '100%'
chart.dispatch.changeState
style: 'stacked'
chart.stacked.style().should.equal 'stacked'
newTickFormat = chart.yAxis.tickFormat()
newTickFormat(1).should.equal '<1>'
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 'if stacked.offset is "wiggle", y ticks is zero', ->
builder.model.stacked.offset 'wiggle'
builder.model.update()
builder.model.yAxis.ticks().should.equal 0
it 'should set color property if not specified', ->
sampleData3 = [
key: 'Series 1'
values: [
[-1,-1]
[ ]
[ ]
[ ]
]
]
builder.build options, sampleData3
should.exist sampleData3[0].color