Цитата:
it не начнёт выполняться пока beforeEach не выполнится, т.е. не вызовет done. С afterEach тоже самое, только после выполнений. |
kobezzza, вот что получилось в итоге, теперь я понял почему нужно писать тесты :)
describe('new ModalJS', function() {
var modal;
it( 'new Object', function() {
modal = new ModalJS();
expect( typeof modal )
.toBe( "object" );
});
it ( "Create overlay", function () {
expect ( isHTMLElement( modal.overlay) )
.toBe( true );
expect ( modal.overlay.parentElement )
.toBe( document.body );
} );
});
function isHTMLElement( elem ) {
return (typeof elem === "object") &&
(elem.nodeType === 1) && (typeof elem.style === "object") &&
(typeof elem.ownerDocument ==="object");
}
describe ( "Methods", function () {
var modal, win;
function resetWindow ( ) {
win = document.getElementById( "modal-test-win");
win2 = document.getElementById( "modal-test-win2");
modal = new ModalJS( {
NotUseAnimate: true
} ).setWindow ( win || win2 );
}
resetWindow();
it( "set window", function () {
expect( modal.setWindow ( win ))
.toEqual ( modal );
});
it ( "Show window", function ( ) {
expect ( modal.show () )
.toBe ( true );
} );
it ( "Hide window", function ( ) {
expect ( modal.hide () )
.toBe ( true );
} );
it ( "Window destroy", function ( ) {
expect ( modal.destroy( ) )
.toBe ( true );
} );
it ( "Window destroy [remove Window]", function ( ) {
resetWindow ( );
expect ( modal.destroy( true ) )
.toBe ( true );
expect ( modal.window )
.toBeUndefined();
} );
} );
describe ( "Async animate", function ( ) {
var win2 = document.getElementById( "modal-test-win2"),
modal = new ModalJS().setWindow ( win2 );
beforeEach( function ( done ) {
modal.on ( "showed", done );
modal.show();
} );
it ( "Hide window", function ( done ) {
modal.on ( "closed", done );
modal.hide();
} );
});
|
Цитата:
|
melky где по читать можно?
|
Дайте мне гениальную идею для новой приложухи
|
Цитата:
Цитата:
http://habrahabr.ru/post/207794/ http://habrahabr.ru/post/186666/ ну а лучше открыть проект на гибхабе и посмотреть его тесты :) visionmedia неплохо писал тесты: https://github.com/visionmedia/page..../test/tests.js а ещё лучше - послухать мнение других разработчиков о тестах :) |
Цитата:
|
Цитата:
Например, есть такая структура файлов и каталогов: Код:
pages
var ProfilePage = require('profile-page'),
QuestionPage = require('question-page'),
UserBlock = require('user-block'),
StatisticsBlock = require('statistics-block'),
api = require('api'),
cookie = require('cookie'),
time = require('time');
в LMD для этого достаточно написать небольшой конфиг:
{
…
modules: {
'<%= file %>': 'modules/*.js'
'<%= dir[0] %>-block': 'blocks/*/*.js'
'<%= dir[0] %>-page': 'pages/*/*.js'
},
…
}
Какой еще сборщик модулей так может? |
melky, я прочитал обе статьи и по читал те тесты на которые ты дал ссылку и пока вижу только 2 ошибки:
1. не правильно подписанные названия для тестов 2. плохо разбитые на группы ( т.е с помощью describe ) А что не так в самих тестах? Я просто не представляю что еще можно тестировать? |
Octane, из коробки не может. решается плагином. хотя если расширить функционал алисов (добавить возможность передачи функции.. или строки регвыра для конструктора RegExp в качестве ключа, например.), то можно и сделать из коробки
например, стало бы так:
// module.exports.resolve.alias ...
{
'([^-])-page': 'pages/$1/$1.js'
}
alert( 'profile-page'.replace(new RegExp('([^-]+)-page'), 'pages/$1/$1.js' )); // pages/profile/profile.js
годная фишка, спасибо, Octane. возьму на заметку. Цитата:
var ProfilePage = require('profile-page')
абстракция от файловой структуры проекта, конечно, хорошая, но не пойму, почему логика идёт от частного (profile) к общему (page) :) Цитата:
но jasmine - BDD, значит нужно следовать принципам BDD:
it ( "Show window", function ( ) {
expect ( modal.show () )
.toBe ( true );
} );
it ( "Hide window", function ( ) {
expect ( modal.hide () )
.toBe ( true );
} );
как ты проверил, что модальное окно скрыто \ показано ? уверен ли ты в том, что эти оба метода работают верно ? по BDD: Попробуй удалить класс модального окна и оставить только тесты. Они начнут проваливаться (перестанут проходить). Попробуй написать класс модального окна, чтобы все тесты начали проходить. Скорее всего, в методах hide и show будет такой код:
Modal.prototype.show = Modal.prototype.hide = function () { return true };
так вот, тесты должны отражать спецификацию - написал код - все тесты проходятся - окей, забиваешь на код гвоздь и идёшь дальше. и не волнуешься о том, что что-то мог забыть - если ты что-то забыл, некоторые тесты должны проваливаться. с багами\фичами так же - пишешь сначала тест, потом код. тесты проходятся - ништяк, всё готово. понимаешь примерно, что делают тесты и какие они должны быть (в BDD)? хм, вообще пример с модальным окном плохой для тестирования. легче протестировать какое-нибудь математическое уравнение прямой (т.е. функцию), или факториал - то, что попроще. ![]() картинка относится к TDD , но вполне отражает суть. разница между TDD и BDD в том, какие сами тесты (синтаксис) и что они тестируют Цитата:
трудно сказать, что можно тестировать - легче сказать, что нельзя тестировать)) мне трудно представить, как тестировать внешний вид (интерфейс) сайта. вот наверное его и нельзя. |
| Часовой пояс GMT +3, время: 13:07. |