var chai = require('chai'); var sinon = require('sinon'); var sinonChai = require('sinon-chai'); var should = chai.should(); var ylt = require('../../lib/index'); chai.use(sinonChai); describe('index.js', function() { it('should return a promise', function() { var promise = ylt(); promise.should.have.property('then').that.is.a('function'); promise.should.have.property('fail').that.is.a('function'); }); it('should fail an undefined url', function(done) { ylt().fail(function(err) { err.should.be.a('string').that.equals('URL missing'); done(); }); }); it('should fail with an empty url string', function(done) { ylt('').fail(function(err) { err.should.be.a('string').that.equals('URL missing'); done(); }); }); it('should succeed on simple-page.html', function(done) { this.timeout(15000); // Check if console.log is called sinon.spy(console, 'log'); var url = 'http://localhost:8388/simple-page.html'; ylt(url) .then(function(data) { data.should.be.an('object'); data.toolsResults.should.be.an('object'); // Test Phantomas data.toolsResults.phantomas.should.be.an('object'); data.toolsResults.phantomas.should.have.a.property('url').that.equals(url); data.toolsResults.phantomas.should.have.a.property('metrics').that.is.an('object'); data.toolsResults.phantomas.metrics.should.have.a.property('requests').that.equals(1); data.toolsResults.phantomas.should.have.a.property('offenders').that.is.an('object'); data.toolsResults.phantomas.offenders.should.have.a.property('DOMelementMaxDepth'); data.toolsResults.phantomas.offenders.DOMelementMaxDepth.should.have.length(1); data.toolsResults.phantomas.offenders.DOMelementMaxDepth[0].should.equal('body > h1[1]'); // Test rules data.should.have.a.property('rules').that.is.an('object'); data.rules.should.have.a.property('DOMelementMaxDepth').that.is.an('object'); data.rules.DOMelementMaxDepth.should.deep.equal({ policy: { "tool": "phantomas", "label": "DOM max depth", "message": "
A deep DOM makes the CSS matching with DOM elements difficult.
It also slows down JavaScript modifications to the DOM because changing the dimensions of an element makes the browser re-calculate the dimensions of it's parents. Same thing for JavaScript events, that bubble up to the document root.
", "isOkThreshold": 10, "isBadThreshold": 20, "isAbnormalThreshold": 28 }, "value": 1, "bad": false, "abnormal": false, "score": 100, "abnormalityScore": 0, "offenders": "