Googlebot interprets javascript. In that case you shouldn't use pushState but fragment URLs[1].
I should have said it is assumed that the URL exists on the server and points to the same resource/content; otherwise setting URLs using pushState makes no sense. GitHub is a good example of how it should be done, not an exception.
[1] https://developers.google.com/webmasters/ajax-crawling/docs/...