diff --git a/modules/components/Link.js b/modules/components/Link.js index bfa82448f7..24212cd75c 100644 --- a/modules/components/Link.js +++ b/modules/components/Link.js @@ -96,7 +96,8 @@ var Link = React.createClass({ var props = assign({}, this.props, { href: this.getHref(), className: this.getClassName(), - onClick: this.handleClick + onClick: this.handleClick, + onTouchEnd: this.handleClick }); return React.DOM.a(props, this.props.children); diff --git a/modules/components/__tests__/Link-test.js b/modules/components/__tests__/Link-test.js index 6e386bce3b..7862e8b0fb 100644 --- a/modules/components/__tests__/Link-test.js +++ b/modules/components/__tests__/Link-test.js @@ -7,7 +7,7 @@ var Route = require('../Route'); var Link = require('../Link'); var TestLocation = require('../../locations/TestLocation'); var { Foo } = require('../../__tests__/TestHandlers'); -var { click } = React.addons.TestUtils.Simulate; +var { click, touchEnd } = React.addons.TestUtils.Simulate; describe('A Link', function () { describe('with params and a query', function () { @@ -126,4 +126,70 @@ describe('A Link', function () { }); + describe('when touched', function () { + it('calls a user defined click handler', function (done) { + var LinkHandler = React.createClass({ + handleClick: function (event) { + assert.ok(true); + done(); + }, + + render: function () { + return Link; + } + }); + + var routes = [ + , + + ]; + var div = document.createElement('div'); + TestLocation.history = ['/link']; + + Router.run(routes, TestLocation, function (Handler) { + React.render(, div, function () { + touchEnd(div.querySelector('a')); + }); + }); + }); + + it('transitions to the correct route', function (done) { + var div = document.createElement('div'); + TestLocation.history = ['/link']; + + var LinkHandler = React.createClass({ + handleClick: function () { + // just here to make sure click handlers don't prevent it from happening + }, + + render: function () { + return Link; + } + }); + + var routes = [ + , + + ]; + + var steps = []; + + steps.push(function () { + touchEnd(div.querySelector('a'), {button: 0}); + }); + + steps.push(function () { + expect(div.innerHTML).toMatch(/Foo/); + done(); + }); + + Router.run(routes, TestLocation, function (Handler) { + React.render(, div, function () { + steps.shift()(); + }); + }); + }); + + }); + });