jakharbek
6 years ago
committed by
GitHub
22 changed files with 604 additions and 87 deletions
@ -0,0 +1,205 @@
|
||||
Yii 2.0 الدليل التقني الخاص ببيئة العمل |
||||
=============================== |
||||
|
||||
تم تحرير هذا الملف اعتمادا على [الشروط الخاصة بتوثيف ال Yii](http://www.yiiframework.com/doc/terms/). |
||||
|
||||
جميع الحقوق محفوظة |
||||
|
||||
2014 (c) Yii Software LLC. |
||||
|
||||
|
||||
المقدمة |
||||
------------ |
||||
|
||||
* [عن بيئة العمل Yii](intro-yii.md) |
||||
* [التحديث من الإصدار 1.1](../guide/intro-upgrade-from-v1.md) |
||||
|
||||
|
||||
البداية من هنا |
||||
--------------- |
||||
|
||||
* [ماذا يجب أن تعرف عن بيئة العمل](start-prerequisites.md) |
||||
* [تنصيب ال Yii](../guide/start-installation.md) |
||||
* [تشغيل وتطبيق بيئة العمل](../guide/start-workflow.md) |
||||
* [قل مرحبا - المشروع الأول](../guide/start-hello.md) |
||||
* [العمل مع ال forms](../guide/start-forms.md) |
||||
* [العمل مع قواعد البيانات](../guide/start-databases.md) |
||||
* [إنشاء الشيفرة البرمجية من خلال ال gii](../guide/start-gii.md) |
||||
* [ماذا الآن - الخطوة القادمة](../guide/start-looking-ahead.md) |
||||
|
||||
|
||||
الهيكلية الخاصة بالتطبيق (Application Structure) |
||||
--------------------- |
||||
|
||||
* [نظرة عامة عن الهيكلية الخاصة بالتطبيق](../guide/structure-overview.md) |
||||
* [Entry Scripts](../guide/structure-entry-scripts.md) |
||||
* [التطبيقات](../guide/structure-applications.md) |
||||
* [مكونات التطبيقات](../guide/structure-application-components.md) |
||||
* [Controllers](../guide/structure-controllers.md) |
||||
* [Models](../guide/structure-models.md) |
||||
* [Views](../guide/structure-views.md) |
||||
* [Modules](../guide/structure-modules.md) |
||||
* [Filters](../guide/structure-filters.md) |
||||
* [Widgets](../guide/structure-widgets.md) |
||||
* [Assets](../guide/structure-assets.md) |
||||
* [Extensions](../guide/structure-extensions.md) |
||||
|
||||
|
||||
التعامل مع ال requests |
||||
----------------- |
||||
|
||||
* [نظرة عامة عن التعامل مع ال requests](../guide/runtime-overview.md) |
||||
* [Bootstrapping](../guide/runtime-bootstrapping.md) |
||||
* [Routing and URL Creation](../guide/runtime-routing.md) |
||||
* [Requests](../guide/runtime-requests.md) |
||||
* [Responses](../guide/runtime-responses.md) |
||||
* [Sessions and Cookies](../guide/runtime-sessions-cookies.md) |
||||
* [Handling Errors - التحكم بالأخطاء](../guide/runtime-handling-errors.md) |
||||
* [Logging - تسجيل الحركات](../guide/runtime-logging.md) |
||||
|
||||
|
||||
المفاهيم الرئيسية (Key Concepts) |
||||
------------ |
||||
|
||||
* [Components](../guide/concept-components.md) |
||||
* [Properties](../guide/concept-properties.md) |
||||
* [Events](../guide/concept-events.md) |
||||
* [Behaviors](../guide/concept-behaviors.md) |
||||
* [Configurations](../guide/concept-configurations.md) |
||||
* [Aliases](../guide/concept-aliases.md) |
||||
* [Class Autoloading](../guide/concept-autoloading.md) |
||||
* [Service Locator](../guide/concept-service-locator.md) |
||||
* [Dependency Injection Container](../guide/concept-di-container.md) |
||||
|
||||
|
||||
التعامل مع قواعد البيانات |
||||
---------------------- |
||||
|
||||
* [Database Access Objects](../guide/db-dao.md): Connecting to a database, basic queries, transactions, and schema manipulation |
||||
* [Query Builder](../guide/db-query-builder.md): Querying the database using a simple abstraction layer |
||||
* [Active Record](../guide/db-active-record.md): The Active Record ORM, retrieving and manipulating records, and defining relations |
||||
* [Migrations](../guide/db-migrations.md): Apply version control to your databases in a team development environment |
||||
* [Sphinx](https://www.yiiframework.com/extension/yiisoft/yii2-sphinx/doc/guide) |
||||
* [Redis](https://www.yiiframework.com/extension/yiisoft/yii2-redis/doc/guide) |
||||
* [MongoDB](https://www.yiiframework.com/extension/yiisoft/yii2-mongodb/doc/guide) |
||||
* [ElasticSearch](https://www.yiiframework.com/extension/yiisoft/yii2-elasticsearch/doc/guide) |
||||
|
||||
|
||||
الحصول على البيانات من خلال المستخدمين |
||||
----------------------- |
||||
|
||||
* [Creating Forms](../guide/input-forms.md) |
||||
* [Validating Input](../guide/input-validation.md) |
||||
* [Uploading Files](../guide/input-file-upload.md) |
||||
* [Collecting Tabular Input](../guide/input-tabular-input.md) |
||||
* [Getting Data for Multiple Models](../guide/input-multiple-models.md) |
||||
* [Extending ActiveForm on the Client Side](../guide/input-form-javascript.md) |
||||
|
||||
|
||||
عرض البيانات |
||||
--------------- |
||||
|
||||
* [Data Formatting](../guide/output-formatting.md) |
||||
* [Pagination](../guide/output-pagination.md) |
||||
* [Sorting](../guide/output-sorting.md) |
||||
* [Data Providers](../guide/output-data-providers.md) |
||||
* [Data Widgets](../guide/output-data-widgets.md) |
||||
* [Working with Client Scripts](../guide/output-client-scripts.md) |
||||
* [Theming](../guide/output-theming.md) |
||||
|
||||
|
||||
الامان والحماية |
||||
-------- |
||||
|
||||
* [Security Overview](../guide/security-overview.md) |
||||
* [Authentication](../guide/security-authentication.md) |
||||
* [Authorization](../guide/security-authorization.md) |
||||
* [Working with Passwords](../guide/security-passwords.md) |
||||
* [Cryptography](../guide/security-cryptography.md) |
||||
* [Auth Clients](https://www.yiiframework.com/extension/yiisoft/yii2-authclient/doc/guide) |
||||
* [Best Practices](../guide/security-best-practices.md) |
||||
|
||||
|
||||
Caching التخزين المؤقت |
||||
------- |
||||
|
||||
* [Caching Overview](../guide/caching-overview.md) |
||||
* [Data Caching](../guide/caching-data.md) |
||||
* [Fragment Caching](../guide/caching-fragment.md) |
||||
* [Page Caching](../guide/caching-page.md) |
||||
* [HTTP Caching](../guide/caching-http.md) |
||||
|
||||
|
||||
RESTful Web Services |
||||
-------------------- |
||||
|
||||
* [Quick Start](../guide/rest-quick-start.md) |
||||
* [Resources](../guide/rest-resources.md) |
||||
* [Controllers](../guide/rest-controllers.md) |
||||
* [Routing](../guide/rest-routing.md) |
||||
* [Response Formatting](../guide/rest-response-formatting.md) |
||||
* [Authentication](../guide/rest-authentication.md) |
||||
* [Rate Limiting](../guide/rest-rate-limiting.md) |
||||
* [Versioning](../guide/rest-versioning.md) |
||||
* [Error Handling](../guide/rest-error-handling.md) |
||||
|
||||
|
||||
الأدوات المساعدة أثناء تطوير التطبيقات |
||||
----------------- |
||||
|
||||
* [Debug Toolbar and Debugger](https://www.yiiframework.com/extension/yiisoft/yii2-debug/doc/guide) |
||||
* [Generating Code using Gii](https://www.yiiframework.com/extension/yiisoft/yii2-gii/doc/guide) |
||||
* [Generating API Documentation](https://www.yiiframework.com/extension/yiisoft/yii2-apidoc) |
||||
|
||||
|
||||
فحص واختبار التطبيقات |
||||
------- |
||||
|
||||
* [Testing Overview](../guide/test-overview.md) |
||||
* [Testing environment setup](../guide/test-environment-setup.md) |
||||
* [Unit Tests](../guide/test-unit.md) |
||||
* [Functional Tests](../guide/test-functional.md) |
||||
* [Acceptance Tests](../guide/test-acceptance.md) |
||||
* [Fixtures](../guide/test-fixtures.md) |
||||
|
||||
|
||||
مواضيع وعناوين مميزة |
||||
-------------- |
||||
|
||||
* [Advanced Project Template](https://www.yiiframework.com/extension/yiisoft/yii2-app-advanced/doc/guide) |
||||
* [Building Application from Scratch](../guide/tutorial-start-from-scratch.md) |
||||
* [Console Commands](../guide/tutorial-console.md) |
||||
* [Core Validators](../guide/tutorial-core-validators.md) |
||||
* [Docker](../guide/tutorial-docker.md) |
||||
* [Internationalization](../guide/tutorial-i18n.md) |
||||
* [Mailing](../guide/tutorial-mailing.md) |
||||
* [Performance Tuning](../guide/tutorial-performance-tuning.md) |
||||
* [Shared Hosting Environment](../guide/tutorial-shared-hosting.md) |
||||
* [Template Engines](../guide/tutorial-template-engines.md) |
||||
* [Working with Third-Party Code](../guide/tutorial-yii-integration.md) |
||||
* [Using Yii as a micro framework](../guide/tutorial-yii-as-micro-framework.md) |
||||
|
||||
|
||||
Widgets |
||||
------- |
||||
|
||||
* [GridView](https://www.yiiframework.com/doc-2.0/yii-grid-gridview.html) |
||||
* [ListView](https://www.yiiframework.com/doc-2.0/yii-widgets-listview.html) |
||||
* [DetailView](https://www.yiiframework.com/doc-2.0/yii-widgets-detailview.html) |
||||
* [ActiveForm](https://www.yiiframework.com/doc-2.0/guide-input-forms.html#activerecord-based-forms-activeform) |
||||
* [Pjax](https://www.yiiframework.com/doc-2.0/yii-widgets-pjax.html) |
||||
* [Menu](https://www.yiiframework.com/doc-2.0/yii-widgets-menu.html) |
||||
* [LinkPager](https://www.yiiframework.com/doc-2.0/yii-widgets-linkpager.html) |
||||
* [LinkSorter](https://www.yiiframework.com/doc-2.0/yii-widgets-linksorter.html) |
||||
* [Bootstrap Widgets](https://www.yiiframework.com/extension/yiisoft/yii2-bootstrap/doc/guide) |
||||
* [jQuery UI Widgets](https://www.yiiframework.com/extension/yiisoft/yii2-jui/doc/guide) |
||||
|
||||
|
||||
Helpers |
||||
------- |
||||
|
||||
* [Helpers Overview](../guide/helper-overview.md) |
||||
* [ArrayHelper](../guide/helper-array.md) |
||||
* [Html](../guide/helper-html.md) |
||||
* [Url](../guide/helper-url.md) |
||||
|
@ -0,0 +1,20 @@
|
||||
Tests de aceptación |
||||
=================== |
||||
|
||||
Un test de aceptación verifica escenarios desde la perspectiva de un usuario. |
||||
Se accede a la aplicación testeada por medio de PhpBrowser o de un navegador de verdad. |
||||
En ambos casos los navegadores se comunican vía HTTP así que la aplicación debe ser |
||||
servida por un servidor web. |
||||
|
||||
Los tests de aceptación se implementan con ayuda del _framework_ Codeception, que tiene |
||||
una buena documentación: |
||||
|
||||
- [Codeception para el _framework_ Yii](http://codeception.com/for/yii) |
||||
- [Tests funcionales de Codeception](http://codeception.com/docs/04-FunctionalTests) |
||||
|
||||
## Ejecución de tests en las plantillas básica y avanzada |
||||
|
||||
Si ha empezado con la plantilla avanzada, consulte la [guía de testeo](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-testing.md) |
||||
para más detalles sobre la ejecución de tests. |
||||
|
||||
Si ha empezado con la plantilla básica, consulte la [sección sobre testeo de su README](https://github.com/yiisoft/yii2-app-basic/blob/master/README.md#testing). |
@ -1,11 +1,25 @@
|
||||
Tests Funcionales |
||||
Tests funcionales |
||||
================= |
||||
|
||||
> Note: Esta sección se encuentra en desarrollo. |
||||
Los tests funcionales verifican escenarios desde la perspectiva de un usuario. |
||||
Son similares a los [tests de aceptación](test-acceptance.md) pero en lugar de |
||||
comunicarse vía HTTP rellena el entorno como parámetros POST y GET y después ejecuta |
||||
una instancia de la aplicación directamente desde el código. |
||||
|
||||
- [Tests Funcionales de Codeception](http://codeception.com/docs/04-FunctionalTests) |
||||
Los tests funcionales son generalmente más rápidos que los tests de aceptación y |
||||
proporcionan _stack traces_ detalladas en los fallos. |
||||
Como regla general, debería preferirlos salvo que tenga una configuración de servidor |
||||
web especial o una interfaz de usuario compleja en Javascript. |
||||
|
||||
Ejecutar test funcionales de templates básicos y avanzados |
||||
---------------------------------------------------------- |
||||
Las pruebas funcionales se implementan con ayuda del _framework_ Codeception, que tiene |
||||
una buena documentación: |
||||
|
||||
Por favor consulta las instrucciones provistas en `apps/advanced/tests/README.md` y `apps/basic/tests/README.md`. |
||||
- [Codeception para el _framework_ Yii](http://codeception.com/for/yii) |
||||
- [Tests funcionales de Codeception](http://codeception.com/docs/04-FunctionalTests) |
||||
|
||||
## Ejecución de tests en las plantillas básica y avanzada |
||||
|
||||
Si ha empezado con la plantilla avanzada, consulte la [guía de testeo](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-testing.md) |
||||
para más detalles sobre la ejecución de tests. |
||||
|
||||
Si ha empezado con la plantilla básica, consulte la [sección sobre testeo de su README](https://github.com/yiisoft/yii2-app-basic/blob/master/README.md#testing). |
||||
|
@ -0,0 +1,80 @@
|
||||
Tests |
||||
===== |
||||
|
||||
Las pruebas son una parte importante del desarrollo de software. Seamos conscientes |
||||
de ello o no, ralizamos pruebas contínuamente. |
||||
Por ejemplo, cuando escribimos una clase en PHP, podemos depurarla paso a paso o |
||||
simplemente usar declaraciones `echo` o `die` para verificar que la implementación |
||||
funciona conforme a nuestro plan inicial. En el caso de una aplicación web, introducimos |
||||
algunos datos de prueba en los formularios para asegurarnos de que la página interactúa |
||||
con nosotros como esperábamos. |
||||
|
||||
El proceso de testeo se puede automatizar para que cada vez que necesitemos verificar |
||||
algo, solamente necesitemos invocar el código que lo hace por nosotros. El código que |
||||
verifica que el restulado coincide con lo que habíamos planeado se llama *test* y el proceso |
||||
de su creación y posterior ejecución es conocido como *testeo automatizado*, que es el |
||||
principal tema de estos capítulos sobre testeo. |
||||
|
||||
|
||||
## Desarrollo con tests |
||||
|
||||
El Desarrollo Dirigido por Pruebas (_Test-Driven Development_ o TDD) y el Desarrollo |
||||
Dirigido por Corpotamientos (_Behavior-Driven Development_ o BDD) son enfoques para |
||||
desarrollar software, en los que se describe el comportamiento de un trozo de código |
||||
o de toda la funcionalidad como un conjunto de escenarios o pruebas antes de escribir |
||||
el código real y sólo entonces crear la implementación que permite pasar esos tests |
||||
verificando que se ha logrado el comportamiento pretendido. |
||||
|
||||
El proceso de desarrollo de una funcionalidad es el siguiente: |
||||
|
||||
- Crear un nuevo test que describe una funcionalidad a implementar. |
||||
- Ejecutar el nuevo test y asegurarse de que falla. Esto es lo esperado, dado que todavía no hay ninguna implementación. |
||||
- Escribir un código sencillo para superar el nuevo test. |
||||
- Ejecutar todos los tests y asegurarse de que se pasan todos. |
||||
- Mejorar el código y asegurarse de que los tests siguen superándose. |
||||
|
||||
Una vez hecho, se repite el proceso de neuvo para otra funcionalidad o mejora. |
||||
Si se va a cambiar la funcionalidad existente, también hay que cambiar los tests. |
||||
|
||||
> Tip: Si siente que está perdiendo tiempo haciendo un montón de iteraciones pequeñas |
||||
> y simples, intente cubrir más por cada escenario de test, de modo que haga más cosas antes |
||||
> de ejecutar los tests de nuevo. Si está depurando demasiado, intente hacer lo contrario. |
||||
|
||||
La razón para crear los tests antes de hacer ninguna implementación es que eso nos permite |
||||
centrarnos en lo que queremos alcanzar y sumergirnos totalmente en «cómo hacerlo» después. |
||||
Normalmente conduce a mejores abstracciones y a un más fácil mantenimiento de los tests |
||||
cuando toque hacer ajustes a las funcionalidades o componentes menos acoplados. |
||||
|
||||
Para resumir, las ventajas de este enfoque son las siguientes: |
||||
|
||||
- Le mantiene centrado en una sola cosa en cada momento, lo que resulta en una mejor planificación e implementación. |
||||
- Resulta en más funcionalidades cubiertas por tests, y en mayor detalle. Es decir, si se superan los tests, lo más problable es que no haya nada roto. |
||||
|
||||
A largo plazo normalmente tiene como efecto un buen ahorro de tiempo. |
||||
|
||||
## Qué y cómo probar |
||||
|
||||
Aunque el enfoque de primero los tests descrito arriba tiene sentido para el largo plazo |
||||
y proyectos relativamente complejos, sería excesivo para proyectos más simples. |
||||
Hay algunas indicaciones de cuándo es apropiado: |
||||
|
||||
- El proyecto ya es grande y complejo. |
||||
- Los requisitos del proyecto están empezando a hacerse complejos. El proyecto crece constantemente. |
||||
- El proyecto pretende a ser a largo plazo. |
||||
- El coste de fallar es demasiado alto. |
||||
|
||||
No hay nada malo en crear tests que cubran el comportamiento de una implementación existente. |
||||
|
||||
- Es un proyecto legado que se va a renovar gradualmente. |
||||
- Le han dado un proyecto sobre el que trabajar y no tiene tests. |
||||
|
||||
En algunos casos cualquier forma de testo automatizado sería exagerada: |
||||
|
||||
- El proyecto es sencillo y no se va a volver más complejo. |
||||
- Es un proyecto puntual en el que no se seguirá trabajando. |
||||
|
||||
De todas formas, si dispone de tiempo, es bueno automatizar las pruebas también en esos casos. |
||||
|
||||
## Más lecturas |
||||
|
||||
- Test Driven Development: By Example / Kent Beck. ISBN: 0321146530. |
@ -1,25 +1,25 @@
|
||||
Tests de Unidad |
||||
=============== |
||||
Pruebas unitarias |
||||
================= |
||||
|
||||
> Note: Esta sección se encuentra en desarrollo. |
||||
Un test unitario se encarga de verificar que una unidad simple de código funcione como se espera. |
||||
Esto decir, dados diferentes parámetros de entrada, el test verifica que el método |
||||
de la clase devuelve el resultado esperado. |
||||
Normalmente los tests unitarios son desarrollados por la persona que escribe las clases testeadas. |
||||
|
||||
Un test de unidad se encarga de verificar que una unidad simple de código funcione como se espera. En la programación orientada a objetos, |
||||
la unidad de código más básica es una clase. Por lo tanto, un test de unidad necesita verificar que cada método de la interfaz de la clase funciona apropiadamente. |
||||
Esto quiere decir que, dando diferentes parámetros de entrada, el test verifica que el método devuelve el resultado esperado. |
||||
Los tests de unidad son normalmente desarrollados por la persona que escribe las clases siendo testeadas. |
||||
Los tests unitarios en Yii están construidos en base a PHPUnit y, opcionalmente, Codeception, por lo que se recomienda consultar su respectiva documentación: |
||||
|
||||
Los tests de unidad en Yii están construidos en base a PHPUnit y opcionalmente, Codeception, por lo que se recomineda consultar su respectiva documentación: |
||||
- [Codeception para el _framework_ Yii](http://codeception.com/for/yii) |
||||
- [Tests unitarios con Codeception](http://codeception.com/docs/05-UnitTests) |
||||
- [Documentación de PHPUnit, empezando por el capítulo 2](http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html) |
||||
|
||||
- [Documentación de PHPUnit comienza en el capítulo 2](http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html). |
||||
- [Tests de Unidad con Codeception](http://codeception.com/docs/05-UnitTests). |
||||
## Ejecución de tests en las plantillas básica y avanzada |
||||
|
||||
Ejecutar test de unidad de templates básicos y avanzados |
||||
-------------------------------------------------------- |
||||
Si ha empezado con la plantilla avanzada, consulte la [guía de testeo](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-testing.md) |
||||
para más detalles sobre la ejecución de tests. |
||||
|
||||
Por favor consulta las instrucciones provistas en `apps/advanced/tests/README.md` y `apps/basic/tests/README.md`. |
||||
Si ha empezado con la plantilla básica, consulte la [sección sobre testeo de su README](https://github.com/yiisoft/yii2-app-basic/blob/master/README.md#testing). |
||||
|
||||
Test de unidad del Framework |
||||
---------------------------- |
||||
##Tests unitarios del framework |
||||
|
||||
Si quieres ejecutar tests de unidad para Yii en sí, consulta |
||||
"[Comenzando a desarrollar con Yii 2](https://github.com/yiisoft/yii2/blob/master/docs/internals/getting-started.md)". |
||||
Si desea ejecutar tests unitarios para el framework Yii en sí, consulte |
||||
«[Comenzando con el desarrollo de Yii 2](https://github.com/yiisoft/yii2/blob/master/docs/internals/getting-started.md)». |
||||
|
@ -1,3 +1,37 @@
|
||||
<form id="w0"> |
||||
<input id="name" type="text" name="name" value=""> |
||||
</form> |
||||
|
||||
<form id="w1"> |
||||
<fieldset disabled=""> |
||||
<div class="form-group required"> |
||||
<label class="control-label" for="test_text">Test text</label> |
||||
<input type="text" id="test_text" class="form-control" name="Test[text]" aria-required="true"> |
||||
<div class="help-block"></div> |
||||
</div> |
||||
</fieldset> |
||||
|
||||
<fieldset disabled=""> |
||||
<div class="form-group required"> |
||||
<label class="control-label">Test radio</label> |
||||
<input type="hidden" name="Test[radio]" value=""> |
||||
<div id="test_radio" aria-required="true"> |
||||
<label><input type="radio" name="Test[radio]" value="1"> Test1</label> |
||||
<label><input type="radio" name="Test[radio]" value="0"> Test2</label> |
||||
</div> |
||||
<div class="help-block"></div> |
||||
</div> |
||||
</fieldset> |
||||
|
||||
<fieldset disabled=""> |
||||
<div class="form-group required"> |
||||
<label class="control-label">Test checkbox</label> |
||||
<input type="hidden" name="Test[checkbox]" value=""> |
||||
<div id="test_checkbox" aria-required="true"> |
||||
<label><input type="checkbox" name="Test[checkbox][]" value="1"> Test1</label> |
||||
<label><input type="checkbox" name="Test[checkbox][]" value="0"> Test2</label> |
||||
</div> |
||||
<div class="help-block"></div> |
||||
</div> |
||||
</fieldset> |
||||
</form> |
Loading…
Reference in new issue