Цитата:
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 в том, какие сами тесты (синтаксис) и что они тестируют Цитата:
трудно сказать, что можно тестировать - легче сказать, что нельзя тестировать)) мне трудно представить, как тестировать внешний вид (интерфейс) сайта. вот наверное его и нельзя. |
Цитата:
require('./pages/profile/index.js') , если структура каталогов или имена файлов поменяются, мне нужно будет только поправить LMD конфиг, а не выполнять замены во всех файлах. Да и запись короче.Цитата:
|
Цитата:
и при смене файловой структуры я бы так же, поменял\добавил алиас к одному только каталогу "pages" ('index.js' сам подставится, как файл по умолчанию - commonjs) Цитата:
require("pages/profile") require("profile/pages") есть ведь разница? Octane, а можно ли с помощью LMD собрать Coffee-script\ES6? как раньше не смог нагуглить, так и сейчас не получается |
Цитата:
Цитата:
|
СТАЙЛУСОБОГИ, нужна ваша помощь в одном простеньком вопросе http://javascript.ru/forum/xhtml-htm...rosaetsya.html
// надеюсь тут можно рекламить свои же темы, срачатред ведь.. |
Давно хотел спросить. Какого черта все объявляют функции таким сложным способом: var fname = function () {};? Чем он лучше простого function fname() {}?
|
ixth,
мб смотря что за код. Мб где-то там оно в условиях используется. |
Цитата:
|
Цитата:
|
ixth,
как-то так http://learn.javascript.ru/function-...ion-expression |
Цитата:
|
Цитата:
|
ixth,
у меня пока что два варианта: 1. Хочется 2. Для оптимизации Вот примерчик //не оптимизированный вариант function fun(i) { ... } function fun2(i) { ... } for (var i = 0; i < мильён; i++) { if (условие) { fun(i); } else { fun2(i); } } // оптимизорованный function fun(i) { ... } function fun2(i) { ... } var f; if (условие) { f = fun; } else { f = fun2; } for (var i = 0; i < мильён; i++) { f(i); } |
В ES5 FunctionDeclaration обязан быть либо вверху глобали, либо функции, т.е.
function foo() { 'use strict'; if (true) { function bar() { // Error } } } В ES6 обсуждают концепцию локальных деклараций, а пока юзаю let + FunctionExpression если нужно такое. |
Цитата:
http://javascript.ru/basic/functions |
Цитата:
Такой пример у меня нормально отрабатывает: function foo() { 'use strict'; var a = 1; return a + bar(); function bar() { return 1; } } |
Цитата:
Цитата:
|
ixth,
Цитата:
|
Цитата:
Цитата:
Я думал, возможно, есть какая-то особая магия, о которой я не знаю. Но судя по всему все делают, потому что Резиг так сказал. Но резюме отсюда немного отрезвляет, конечно. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
не привлекай чертей без крайней необходимости и будет тебе счастье :yes: |
Чет я не много не вкурю, нужно перехватить запрос сайт с помощью node.js
к примеру идет запрос на гугл.com, пытаюсь сделать так но не работает var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(80, 'google.com', function ( ) { console.log( "work" ); } ); |
Цитата:
|
Цитата:
|
Цитата:
|
уффффф, чёто я опять перебрал:blink: , всем мир!
|
kobezzza,
здравствуй. А я опять переел и заснул под вечер( |
А я пиццу заказал. И кино
![]() |
Цитата:
|
Часовой пояс GMT +3, время: 05:11. |