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()();
+ });
+ });
+ });
+
+ });
+
});