Up tonight, a bit of CSS testing. I don't know that I have ever tested code whose primary purpose was manipulating CSS, but how hard can it be?
The testing will apply to the newly minted
<apply-author-styles>
element. I will use the familiar combination of Karma and Jasmine to run the tests.I start from a fixture page. In my test I will use a sample Polymer element,
<x-foo>
, and assert that various page classes should apply:<polymer-element name="x-foo"> <template> <apply-author-styles></apply-author-styles> <button id=test>Test</button> </template> </polymer-element>I start by forcing my HTML files in Karma to be treated as HTML source files, not fixtures (which would be available in the
__html__
top-level lookup):// ... preprocessors: null, files: [ 'test/PolymerSetup.js', {pattern: 'apply-author-styles.html', included: false, served: true}, {pattern: 'apply_author_styles.js', included: false, served: true}, {pattern: 'bower_components/**', included: false, served: true}, 'test/**/*Spec.js', {pattern: 'test/*.html', included: false, served: true} ], // ...Then, in the PolymerSetup.js file that I still use for my Polymer testing, I load the definition for this test Polymer element in addition to loading
<apply-author-styles>
:// ... // 2. Load component(s) var link = document.createElement("link"); link.rel = "import"; link.href = "/base/apply-author-styles.html"; document.getElementsByTagName("head")[0].appendChild(link); var fixtureLink = document.createElement("link"); fixtureLink.rel = "import"; fixtureLink.href = "/base/test/x-foo.html"; document.getElementsByTagName("head")[0].appendChild(fixtureLink);
I keep forgetting that I am using Jasmine 2.0 nowadays and it takes me a while to remember how to install that. I need to add it to my NPM
package.json
file:{ "name": "apply-author-styles", "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-watch": "~0.5.3", "karma-jasmine": "~0.2.0", "karma-chrome-launcher": ">0.0" } }And then run
npm install
. How could I possibly forget to configure and run a server-side package manager when configuring a client-side testing framework? It is completely obvious. Ahem.
Finally, I am able to write a test:
describe('<apply-author-styles>', function(){ var container, el; beforeEach(function(){ container = document.createElement("div"); el = document.createElement("x-foo"); container.appendChild(el); document.body.appendChild(container); }); afterEach(function(){ document.body.removeChild(container); }); describe('styles of elements using is', function(){ it('should apply page CSS from <style> tags', function(){ // ??? }); }); });Unfortunately, I wind up stuck trying to test my specific element at this point. One of the main features of
<apply-author-styles>
is that it ignores styles that are not hard-coded in the original HTML document. Unfortunately, getting access to the original source document that is used to hold Karma tests—and to change it for a particular test run—seems difficult. At best.I may have to alter my approach. Tomorrow.
Day #96
No comments:
Post a Comment