Пример #1
0
function newComponent(attributes, mixins) {

  if (mixins) {
    mixins = ReactMixinManager.get(mixins);
  } else {
    mixins = [];
  }

  var obj = {
    setState: sinon.spy(function(state) {
      this.state = _.extend(this.state || {}, state);
    }),
    setProps: function(props) {
      this.trigger('componentWillReceiveProps', props);
      this.props = this.props || {};
      _.extend(this.props, props);
    },
    mount: function() {
      this._mounted = true;
      this.trigger('componentWillMount');
      this.trigger('componentDidMount');
    },
    unmount: function() {
      this._mounted = false;
      this.trigger('componentWillUnmount');
      this.trigger('componentDidUnmount');
    },

    isMounted: function() { return this._mounted; },
    trigger: function(method) {
      var rtn = [];
      for (var i=0; i<mixins.length; i++) {
        var func = mixins[i][method];
        if (func) {
          rtn.push(func.apply(this, Array.prototype.slice.call(arguments, 1)));
        }
      }
      return rtn;
    }
  };
  if (attributes) {
    _.each(attributes, function(value, name) {
      obj[name] = value;
    });
  }
  obj.props = obj.props || {};

  var state, aggregateState;

  for (var i=0; i<mixins.length; i++) {
    var mixin = mixins[i];
    _.defaults(obj, mixin);
    state = mixin.getInitialState && mixin.getInitialState.call(obj);
    if (state) {
      if (!aggregateState) {
        aggregateState = {};
      }
      _.defaults(aggregateState, state);
    }
  }
  obj.state = aggregateState;
  return obj;
}
Пример #2
0
 it('should include events mixin, Backbone.Events for on/off/trigger mixin and the react-events "state" mixin', function() {
   var mixins = ReactMixinManager.get('events');
   expect(mixins.length).to.eql(3);
 });