Within each .drum-pad, there should be an HTML5 <audio> element which has a src attribute pointing to an audio clip, a class name of "clip", and an id corresponding to the inner text of its parent .drum-pad (e.g. id="Q", id="W", id="E" etc.).
First, you’re missing src attribute in <audio>. You have added <source>, but test expect explicitly src attribute.
Second, tests are expecting for the <audio> element to be clicked, not the JS Audio object to be constructed and played.
The tests unfortunately are not testing the functionality, but implementation, which actually is considered a bad practice.
But I have to say, even for example last requirement is : ## When a .drum-pad is triggered, a string describing the associated audio clip is displayed as the inner text of the #display element (each string must be unique).
So I changed Vue apps data object to reflect that element, it was printing out values but it didnt pass the test, only when i fetched DOM element itself and set innerText it passed. document.querySelector("#display").innerText=r.audio
This just seems wrong to me. I mean whole point of using this framers is to manipulate data. Not DOM elements.