First off, I'm not great at testing; I'll come right out and say that. But I've had a few issues lately and am curious how I'd automate testing to safeguard features. Here's the scenario:
On the beta signup form for DayTrip, I wanted to use the new fetch()
API as a replacement for jQuery and $.ajax
. Using this across all browsers requires two polyfills, a Fetch Polyfill and a Promises Polyfill. The form has has broken twice now which is not ideal for a new product.
- First time was just ignorance, didn't realize I needed a Promise polyfill for some modern browsers, even tho that's documented on the Fetch polyfill.
- Second time was a botched Asset Pipeline. The polyfills weren't included in my
home.js
, maybe due switching torails_12factor
, still not sure.
Β | Edge | Mobile Safari | Chrome |
---|---|---|---|
Promises | β | π | π |
Fetch | β | β | π |
Another similar situation I have is with the <picture>
element:
Β | Edge | Mobile Safari | Chrome |
---|---|---|---|
srcset |
β | π | π |
<picture> |
β | β | π |
Different browers need different levels of polyfilling. So my question is this:
- Is it possible to automate testing that necessary polyfills exist as apart of an Integration test?
- Is it possible to automate that across multiple platforms and browsers? Or is the only way to test to manually click through each
form
on each browser? - Even if I did the testing and the Asset Pipeline didn't inclulde and minify the correct files, would JS testing be able to detect that?
- Is this out of scope for what I should be testing? What's a better way?
Automated integration testing across browsers is the holy grail. If you can figure out how to do it I would definitely go that way.
If the polyfill libraries are well tested, testing that they load is a decent idea. If you don't quite trust their tests, or if you want some extra assurance, you could write some really low level unit tests to ensure the APIs behave as you expect and run those across multiple browsers, e.g., test that a promise is created correctly using the functions you're polyfilling. That would be a lot harder with picture though; the tests for the polyfill should really be in the polyfill itself.
From your description I think you want integration tests run on a bunch of browsers. I've heard good things about Saucelabs, but haven't used it myself. You might want to set these long running tests as nightlies, pre-deploy, and on request (maybe before you open a PR), since it's going to be a pain to wait for your suite to run on 10 browsers every time you want to push a commit and check that it works.