2016-06-19 5 views
0

Я написал небольшую страницу, чтобы узнать BDD/TDD. Именно в http://duolingo.howyousay.it/link.htmlКак я могу проверить часть кода, которая выполняется до onready?

Мои тесты (только один файл в данный момент) находятся на http://duolingo.howyousay.it/tests/test.html?coverage&hidepassed&noglobals

Я сумел получить покрытие кода 100% за 5 строк, за исключением http://duolingo.howyousay.it/duolingo_link_fixer.js

1 var DuolingoLinkFixer = function() { 
    2 this.data = {}; 
    3 var self = this; 
    4 
    5 document.onreadystatechange = function() { 
* 6  self.init(); 
    7 } 
    8 }; 
    9 
    10 DuolingoLinkFixer.prototype.init = function() { 
* 11 if (document.readyState == "complete") { 
* 12  this.setOriginalUrl(); 
* 13  this.setAlternateText(); 
* 14  this.setFixedUrl(); 
    15 } 
    16 } 

линий 6 и 11-14 не проходят тестирование, но если я их удалю, код не работает. Я использую QUnit, QUnit-BDD и Blanket.js. Как я могу проверить часть кода, которая работает до onready, поскольку кажется, что тесты запускаются только после onready?

Мой тестовый код в настоящее время начинается так:

describe("DuolingoLinkFixer", function() { 
    describe("new", function() { 
    it("should create a new instance of DuolingoLinkFixer", function() { 
     expect(new DuolingoLinkFixer instanceof DuolingoLinkFixer).to.be.true(); 
    }); 
    }); 

}); 

Это источник для моего HTML тестовой страницы:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Duolingo JavaScript tests</title> 

    <script type="text/javascript" src="/lib/jquery/jquery-3.0.0.js"></script> 
    <script type="text/javascript"> 
     $.holdReady(true); 
    </script> 

    <link type="text/css" rel="stylesheet" href="/lib/qunit/qunit-1.23.1.css"> 
    <script type="text/javascript" src="/lib/qunit/qunit-1.23.1.js"></script> 
    <script type="text/javascript" src="/lib/qunit-bdd/qunit-bdd.js"></script> 

    <script type="text/javascript" src="/lib/blanket.js/blanket.min.js"></script> 

    <script type="text/javascript" data-cover src="../url_helper.js"></script> 
    <script type="text/javascript" data-cover src="../duolingo_link_fixer.js"></script> 

    <script type="text/javascript" src="test_url_helper.js"></script> 
    <script type="text/javascript" src="test_duolingo_link_fixer.js"></script> 
    </head> 
    <body> 
    <div id="qunit"></div> 
    </body> 
</html> 

Я попытался добавить JQuery-х $.holdReady(true); как предложено в другой должности, но Бесполезный» t помочь. Мне не нужно использовать jQuery, поэтому я стараюсь избегать этого для этого проекта.

+0

Первое, что я хотел бы сделать, это добавить некоторые распечатки с помощью 'console.log (« here I am »);'. Затем вы сможете лучше сосредоточиться. – FDavidov

+0

Это может быть интересно сделать ... но ... Возможно, вы сможете создать готовое событие и испустить событие в верхней части страницы ... idk синтаксис. возможно, что-то вроде: var e = document.createEvent ('ready'); e.emitChange(); снова не уверен в точном синтаксисе –

+0

@FDavidov Я нашел это в документах: https://api.qunitjs.com/QUnit.config/ В нем говорится, что вы можете отключить автозапуск и запустить его вручную _after_ ' onready', а не сразу, как только «onready» срабатывает. Я не разработал, если можно вручную запустить его перед запуском 'onready'. –

ответ

0

Оказалось, что я только нужно добавить одну строку в мой тестовый код, чтобы проверить ранее непроверяема код:

describe("DuolingoLinkFixer", function() { 
    describe("new", function() { 
    it("should create a new instance of DuolingoLinkFixer", function() { 
     expect(new DuolingoLinkFixer instanceof DuolingoLinkFixer).to.be.true(); 
     document.onreadystatechange(); 
    }); 
    }); 

}); 

Добавление document.onreadystatechange(); запускает код точно так же, как если бы она была вызвана событие readyStateChange.

 Смежные вопросы

  • Нет связанных вопросов^_^