Этот пост относится к работе 8 августа, что было 55-м днем ​​моего #100daysofcode

Продолжая вчерашний день, я продолжаю тестировать свой RPG-фреймворк. Теперь, когда я немного лучше знаком с Mocha, должен и превращаю вещи в модули, которые можно загружать в Nodejs, гораздо проще ругаться с выкачиванием тестов.

Бой

Боевой модуль — это не то, что я решил проверить на сколько-нибудь глубоком уровне. У него четыре функции, и я проверяю, существуют ли они и являются ли они функциями, но быстро перехожу от размышлений о сложности результатов тестирования. Многие функции используют случайные числа для генерирования вывода, и я еще не придумал, как лучше их протестировать.

Игровой и неигровой персонаж

Эти два объекта почти идентичны, но я слишком боюсь совершить ошибку, чтобы заставить их наследовать от одного и того же родительского объекта персонажа. Таким образом, тесты в значительной степени являются копией/вставкой из одного в другое. В отличие от боевого объекта эти объекты, по крайней мере, имеют предсказуемые результаты от исполнения.

Начиная с создания нового экземпляра объекта:

var PlayerCharacter = new playerCharacter(3,3,3,3,’player’);

Я могу предсказать, что он должен вернуть '3' для каждого из четырех атрибутов объекта (ближний бой, дальний бой, особый и прочность):

it(‘should have a function of getMelee that returns a number and the number is 3’, function(done){
    PlayerCharacter.should.have.property(‘getMelee’);
    PlayerCharacter.getMelee.should.be.a.Function;
    PlayerCharacter.getMelee().should.be.a.Number;
    PlayerCharacter.getMelee().should.be.exactly(3);
    done();
 });

Затем этот шаблон повторяется для остальных трех атрибутов.

Объект также имеет несколько вычисляемых свойств, которые проверяются таким же образом.

Из-за моего плохого программирования также существуют такие свойства, как здоровье , которые в настоящее время возвращают строку, содержащую значение. Поэтому я должен немного изменить этот шаблон:

it(‘should have a function of getHealth which returns a string which is “Health is 3/3”’, function(done){
    PlayerCharacter.should.have.property(‘getHealth’);
    PlayerCharacter.getHealth.should.be.a.Function;
    PlayerCharacter.getHealth().should.be.a.String;
    PlayerCharacter.getHealth().should.equal(‘Health is 3/3’);
    done();
 });

Подобъекты

Что-то, что используют эти классы, — это объект инвентаризации, созданный как свойство. Я не могу понять, как это должно быть реализовано в тесте. Я пробую несколько способов включения файла в качестве ссылки, но он никогда не становится доступным внутри символьного объекта в качестве инстанцируемого объекта. Чтобы обмануть, я заключаю строку, которая вызывает его, в блок if:

if(typeof Inventory !== ‘undefined’) {
 this.inventory = new Inventory();
}

Это делает тест пройденным, но это еще одна вещь, к которой нужно вернуться позже.

Итак, сегодня много печатается, копируется и вставляется, но мало чему учится, только возможности для обучения в будущем. Некоторая форма модульной системы в самом интерфейсе, вероятно, то, что мне нужно, чтобы исправить это, поэтому я думаю, что require.js может быть в моем списке вещей, которые я должен изучить в ближайшем будущем.