Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

kobezzza 03.08.2014 12:50

Цитата:

Не могу понять как эти штуки работают
https://github.com/kobezzza/Collecti...orage.es6#L334

it не начнёт выполняться пока beforeEach не выполнится, т.е. не вызовет done. С afterEach тоже самое, только после выполнений.

cyber 03.08.2014 21:05

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 03.08.2014 22:33

Цитата:

Сообщение от cyber
теперь я понял почему нужно писать тесты

но ты не понял , как их писать и зачем :(

cyber 04.08.2014 00:12

melky где по читать можно?

l-liava-l 04.08.2014 00:45

Дайте мне гениальную идею для новой приложухи

melky 04.08.2014 08:51

Цитата:

Сообщение от l-liava-l (Сообщение 324137)
Дайте мне гениальную идею для новой приложухи

нормальный, не косой PopcornTime. это single page webapp ;)

Цитата:

Сообщение от cyber (Сообщение 324133)
melky где по читать можно?

как-то так:
http://habrahabr.ru/post/207794/
http://habrahabr.ru/post/186666/

ну а лучше открыть проект на гибхабе и посмотреть его тесты :)

visionmedia неплохо писал тесты:

https://github.com/visionmedia/page..../test/tests.js

а ещё лучше - послухать мнение других разработчиков о тестах :)

cyber 04.08.2014 14:11

Цитата:

Сообщение от melky
а ещё лучше - послухать мнение других разработчиков о тестах

Поделишься своим?)

Octane 05.08.2014 13:15

Цитата:

Сообщение от melky
глянь brunch и webpack, настаиваю) не теряй на browserify время

Не нашел ни в одном возможности автоматически именовать модули, как в LMD.
Например, есть такая структура файлов и каталогов:
Код:

pages
|–– profile
|  |––index.js
|–– question
    |––index.js

blocks
|–– user
|  |–– index.js
|–– statistics
    |–– index.js

modules
|–– api.js
|–– cookie.js
|–– time.js

и мы хотим подключать модули следующим образом:
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'
    },
    …
}
Какой еще сборщик модулей так может?

cyber 05.08.2014 13:40

melky, я прочитал обе статьи и по читал те тесты на которые ты дал ссылку и пока вижу только 2 ошибки:
1. не правильно подписанные названия для тестов
2. плохо разбитые на группы ( т.е с помощью describe )

А что не так в самих тестах? Я просто не представляю что еще можно тестировать?

melky 05.08.2014 16:11

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. возьму на заметку.

Цитата:

Сообщение от Octane
Какой еще сборщик модулей так может?

зачем так вообще делать ? :)
var ProfilePage = require('profile-page')

абстракция от файловой структуры проекта, конечно, хорошая, но не пойму, почему логика идёт от частного (profile) к общему (page) :)


Цитата:

Сообщение от cyber (Сообщение 324367)
melky, я прочитал обе статьи и по читал те тесты на которые ты дал ссылку и пока вижу только 2 ошибки:
1. не правильно подписанные названия для тестов
2. плохо разбитые на группы ( т.е с помощью describe )
А что не так в самих тестах?

угумс.

но 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 в том, какие сами тесты (синтаксис) и что они тестируют

Цитата:

Сообщение от cyber (Сообщение 324367)
Я просто не представляю что еще можно тестировать?

ты когда работу сделаешь, открываешь браузер и смотришь на результат - что ты делаешь? тестируешь. в автоматизированном тестировании ты перекладываешь работу по тестированию с себя на комп.

трудно сказать, что можно тестировать - легче сказать, что нельзя тестировать))

мне трудно представить, как тестировать внешний вид (интерфейс) сайта. вот наверное его и нельзя.


Часовой пояс GMT +3, время: 08:36.