xcraft-reflux
Version:
A simple library for uni-directional dataflow application architecture inspired by ReactJS Flux
82 lines (67 loc) • 2.81 kB
JavaScript
var assert = require('chai').assert,
sinon = require('sinon'),
connect = require('../src/connect'),
Reflux = require('../src'),
_ = Reflux.utils;
describe('using the connect(...) mixin',function(){
it("should be exposed in Reflux",function(){
assert.equal(connect, Reflux.connect);
});
describe("when calling with action",function() {
var listenable = {
listen: sinon.spy()
},
context = {setState: sinon.spy()};
_.extend(context,connect(listenable, "KEY"));
it("should pass empty object to state",function(){
assert.deepEqual({},context.getInitialState());
});
});
describe("when calling without key",function(){
it("should throw.",function(){
var listenable = {
listen: function() {},
getInitialState: function() {}
};
assert.throws(function () {
connect(listenable);
}, 'Reflux.connect() requires a key.');
});
});
describe("when calling with key",function(){
var initialstate = "DEFAULTDATA",
triggerdata = "TRIGGERDATA",
key = "KEY",
listenable = {
listen: sinon.spy(),
getInitialState: sinon.stub().returns(initialstate)
},
context = {setState: sinon.spy()},
result = _.extend(context,connect(listenable,key));
it("should pass initial state to state correctly",function(){
assert.deepEqual({KEY:initialstate},context.getInitialState());
});
result.componentDidMount();
it("should call listen on the listenable correctly",function(){
assert.equal(1,listenable.listen.callCount);
assert.isFunction(listenable.listen.firstCall.args[0]);
assert.equal(context,listenable.listen.firstCall.args[1]);
});
it("should send listenable callback which calls setState correctly",function(){
listenable.listen.firstCall.args[0](triggerdata);
assert.deepEqual([_.object([key],[triggerdata])],context.setState.firstCall.args);
});
});
describe("when calling with falsy key",function(){
var triggerdata = "TRIGGERDATA",
key = 0,
listenable = {listen: sinon.spy()},
context = {setState: sinon.spy()},
result = _.extend(context,connect(listenable,key));
result.componentDidMount();
it("should send listenable callback which calls setState correctly",function(){
listenable.listen.firstCall.args[0](triggerdata);
assert.deepEqual([_.object([key],[triggerdata])],context.setState.firstCall.args);
});
});
});