~budgester/irm/trunk

« back to all changes in this revision

Viewing changes to testing/simpletest/docs/fr/form_testing_documentation.html

  • Committer: budgester at budgester
  • Date: 2008-03-05 23:14:13 UTC
  • Revision ID: budgester@budgester.com-20080305231413-k5vqfuckfo09ju42
Initial import of IRM codebase

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<html>
 
2
<head>
 
3
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
4
<title>Documentation SimpleTest : tester des formulaires HTML</title>
 
5
<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
 
6
</head>
 
7
<body>
 
8
<div class="menu_back">
 
9
<div class="menu">
 
10
<h2>
 
11
<a href="index.html">SimpleTest</a>
 
12
</h2>
 
13
<ul>
 
14
<li>
 
15
<a href="overview.html">Overview</a>
 
16
</li>
 
17
<li>
 
18
<a href="unit_test_documentation.html">Unit tester</a>
 
19
</li>
 
20
<li>
 
21
<a href="group_test_documentation.html">Group tests</a>
 
22
</li>
 
23
<li>
 
24
<a href="mock_objects_documentation.html">Mock objects</a>
 
25
</li>
 
26
<li>
 
27
<a href="partial_mocks_documentation.html">Partial mocks</a>
 
28
</li>
 
29
<li>
 
30
<a href="reporter_documentation.html">Reporting</a>
 
31
</li>
 
32
<li>
 
33
<a href="expectation_documentation.html">Expectations</a>
 
34
</li>
 
35
<li>
 
36
<a href="web_tester_documentation.html">Web tester</a>
 
37
</li>
 
38
<li>
 
39
<a href="form_testing_documentation.html">Testing forms</a>
 
40
</li>
 
41
<li>
 
42
<a href="authentication_documentation.html">Authentication</a>
 
43
</li>
 
44
<li>
 
45
<a href="browser_documentation.html">Scriptable browser</a>
 
46
</li>
 
47
</ul>
 
48
</div>
 
49
</div>
 
50
<h1>Documentation sur les tests de formulaire</h1>
 
51
<div class="content">
 
52
        <p>
 
53
<a class="target" name="submit">
 
54
<h2>Valider un formulaire simple</h2>
 
55
</a>
 
56
</p>
 
57
            <p>
 
58
                Lorsqu'une page est t&eacute;l&eacute;charg&eacute;e par <span class="new_code">WebTestCase</span> en utilisant <span class="new_code">get()</span> ou <span class="new_code">post()</span> le contenu de la page est automatiquement analys&eacute;. De cette analyse d&eacute;coule le fait que toutes les commandes &agrave; l'int&eacute;rieur de la balise &lt;form&gt; sont disponibles depuis l'int&eacute;rieur du sc&eacute;nario de test. Prenons par exemple cet extrait de code HTML...
 
59
<pre>
 
60
&lt;form&gt;
 
61
    &lt;input type="text" name="a" value="A default" /&gt;
 
62
    &lt;input type="submit" value="Go" /&gt;
 
63
&lt;/form&gt;
 
64
</pre>
 
65
                Il ressemble &agrave;...
 
66
            </p>
 
67
            <p>
 
68
                <form class="demo">
 
69
                    <input type="text" name="a" value="A default">
 
70
                    <input type="submit" value="Go">
 
71
                </form>
 
72
            </p>
 
73
            <p>
 
74
                Nous pouvons naviguer vers ce code, via le site <a href="http://www.lastcraft.com/form_testing_documentation.php">LastCraft</a>, avec le test suivant...
 
75
<pre>
 
76
class SimpleFormTests extends WebTestCase {
 
77
    <strong>
 
78
    function testDefaultValue() {
 
79
        $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
 
80
        $this-&gt;assertField('a', 'A default');
 
81
    }</strong>
 
82
}
 
83
</pre>
 
84
                Directement apr&egrave;s le chargement de la page toutes les commandes HTML sont initi&eacute;es avec leur valeur par d&eacute;faut, comme elles appara&icirc;traient dans un navigateur web. L'assertion teste qu'un objet HTML avec le nom "a" existe dans la page et qu'il contient la valeur "A default".
 
85
            </p>
 
86
            <p>
 
87
                Nous pourrions retourner le formulaire tout de suite, mais d'abord nous allons changer la valeur du champ texte. Ce n'est qu'apr&egrave;s que nous le transmettrons...
 
88
<pre>
 
89
class SimpleFormTests extends WebTestCase {
 
90
 
 
91
    function testDefaultValue() {
 
92
        $this-&gt;get('http://www.my-site.com/');
 
93
        $this-&gt;assertField('a', 'A default');<strong>
 
94
        $this-&gt;setField('a', 'New value');
 
95
        $this-&gt;clickSubmit('Go');</strong>
 
96
    }
 
97
}
 
98
</pre>
 
99
                Parce que nous n'avons sp&eacute;cifi&eacute; ni attribut "method" sur la balise form, ni attribut "action", le sc&eacute;nario de test suivra le comportement classique d'un navigateur : transmission des donn&eacute;es avec une requ&ecirc;te <em>GET</em> vers la m&ecirc;me page. SimpleTest essaie d'&eacute;muler le comportement typique d'un navigateur autant que possible, plut&ocirc;t que d'essayer d'attraper des attributs manquants sur les balises. La raison est simple : la cible d'un framework de test est la logique d'une application PHP, pas les erreurs -- de syntaxe ou autres -- du code HTML. Pour les erreurs HTML, d'autres outils tel <a href="http://www.w3.org/People/Raggett/tidy/">HTMLTidy</a> devraient &ecirc;tre employ&eacute;s.
 
100
            </p>
 
101
            <p>
 
102
                Si un champ manque dans n'importe quel formulaire ou si une option est indisponible alors <span class="new_code">WebTestCase::setField()</span> renverra <span class="new_code">false</span>. Par exemple, supposons que nous souhaitons v&eacute;rifier qu'une option "Superuser" n'est pas pr&eacute;sente dans ce formulaire...
 
103
<pre>
 
104
&lt;strong&gt;Select type of user to add:&lt;/strong&gt;
 
105
&lt;select name="type"&gt;
 
106
    &lt;option&gt;Subscriber&lt;/option&gt;
 
107
    &lt;option&gt;Author&lt;/option&gt;
 
108
    &lt;option&gt;Administrator&lt;/option&gt;
 
109
&lt;/select&gt;
 
110
</pre>
 
111
                Qui ressemble &agrave;...
 
112
            </p>
 
113
            <p>
 
114
                <form class="demo">
 
115
                    <strong>Select type of user to add:</strong>
 
116
                    <select name="type">
 
117
                        <option>Subscriber</option>
 
118
                        <option>Author</option>
 
119
                        <option>Administrator</option>
 
120
                    </select>
 
121
                </form>
 
122
            </p>
 
123
            <p>
 
124
                Le test suivant le confirmera...
 
125
<pre>
 
126
class SimpleFormTests extends WebTestCase {
 
127
    ...
 
128
    function testNoSuperuserChoiceAvailable() {<strong>
 
129
        $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
 
130
        $this-&gt;assertFalse($this-&gt;setField('type', 'Superuser'));</strong>
 
131
    }
 
132
}
 
133
</pre>
 
134
                La s&eacute;lection ne sera pas chang&eacute;e suite &agrave; un &eacute;chec d'initialisation d'une valeur sur un objet.
 
135
            </p>
 
136
            <p>
 
137
                Voici la liste compl&egrave;te des objets support&eacute;s &agrave; aujourd'hui...
 
138
                <ul>
 
139
                    <li>Champs texte, y compris les champs masqu&eacute;s (hidden) ou crypt&eacute;s (password).</li>
 
140
                    <li>Boutons submit, en incluant aussi la balise button, mais pas encore les boutons reset</li>
 
141
                    <li>Aires texte (textarea) avec leur gestion des retours &agrave; la ligne (wrap).</li> 
 
142
                    <li>Cases &agrave; cocher, y compris les cases &agrave; cocher multiples dans un m&ecirc;me formulaire.</li>
 
143
                    <li>Listes &agrave; menu d&eacute;roulant, y compris celles &agrave; s&eacute;lections multiples.</li>
 
144
                    <li>Boutons radio.</li>
 
145
                    <li>Images.</li>
 
146
                </ul>
 
147
            </p>
 
148
            <p>
 
149
                Bien que la plupart des objets HTML standards soient couvert par le parseur de <em>SimpleTest</em>, il est peu probable que JavaScript soit impl&eacute;ment&eacute; dans un futur proche.
 
150
            </p>
 
151
        
 
152
        <p>
 
153
<a class="target" name="multiple">
 
154
<h2>Champs &agrave; valeurs multiples</h2>
 
155
</a>
 
156
</p>
 
157
            <p>
 
158
                SimpleTest peut g&eacute;rer deux types de commandes &agrave; valeur multiple : les menus d&eacute;roulants &agrave; s&eacute;lection multiple et les cases &agrave; cocher avec le m&ecirc;me nom &agrave; l'int&eacute;rieur m&ecirc;me d'un formulaire. La nature de ceux-ci implique que leur initialisation et leur test sont l&eacute;g&egrave;rement diff&eacute;rents. Voici un exemple avec des cases &agrave; cocher...
 
159
<pre>
 
160
&lt;form class="demo"&gt;
 
161
    &lt;strong&gt;Create privileges allowed:&lt;/strong&gt;
 
162
    &lt;input type="checkbox" name="crud" value="c" checked&gt;&lt;br&gt;
 
163
    &lt;strong&gt;Retrieve privileges allowed:&lt;/strong&gt;
 
164
    &lt;input type="checkbox" name="crud" value="r" checked&gt;&lt;br&gt;
 
165
    &lt;strong&gt;Update privileges allowed:&lt;/strong&gt;
 
166
    &lt;input type="checkbox" name="crud" value="u" checked&gt;&lt;br&gt;
 
167
    &lt;strong&gt;Destroy privileges allowed:&lt;/strong&gt;
 
168
    &lt;input type="checkbox" name="crud" value="d" checked&gt;&lt;br&gt;
 
169
    &lt;input type="submit" value="Enable Privileges"&gt;
 
170
&lt;/form&gt;
 
171
</pre>
 
172
                Qui se traduit par...
 
173
            </p>
 
174
            <p>
 
175
                <form class="demo">
 
176
                    <strong>Create privileges allowed:</strong>
 
177
                    <input type="checkbox" name="crud" value="c" checked>
 
178
<br>
 
179
                    <strong>Retrieve privileges allowed:</strong>
 
180
                    <input type="checkbox" name="crud" value="r" checked>
 
181
<br>
 
182
                    <strong>Update privileges allowed:</strong>
 
183
                    <input type="checkbox" name="crud" value="u" checked>
 
184
<br>
 
185
                    <strong>Destroy privileges allowed:</strong>
 
186
                    <input type="checkbox" name="crud" value="d" checked>
 
187
<br>
 
188
                    <input type="submit" value="Enable Privileges">
 
189
                </form>
 
190
            </p>
 
191
            <p>
 
192
                Si nous souhaitons d&eacute;sactiver tous les privil&egrave;ges sauf ceux de t&eacute;l&eacute;chargement (Retrieve) et transmettre cette information, nous pouvons y arriver par...
 
193
<pre>
 
194
class SimpleFormTests extends WebTestCase {
 
195
    ...<strong>
 
196
    function testDisableNastyPrivileges() {
 
197
        $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
 
198
        $this-&gt;assertField('crud', array('c', 'r', 'u', 'd'));
 
199
        $this-&gt;setField('crud', array('r'));
 
200
        $this-&gt;clickSubmit('Enable Privileges');
 
201
    }</strong>
 
202
}
 
203
</pre>
 
204
                Plut&ocirc;t que d'initier le champ &agrave; une valeur unique, nous lui donnons une liste de valeurs. Nous faisons la m&ecirc;me chose pour tester les valeurs attendues. Nous pouvons &eacute;crire d'autres bouts de code de test pour confirmer cet effet, peut-&ecirc;tre en nous connectant comme utilisateur et en essayant d'effectuer une mise &agrave; jour.
 
205
            </p>
 
206
            <p>
 
207
                <a class="target" name="brut">
 
208
<h2>Envoi brut</h2>
 
209
</a>
 
210
            </p>
 
211
            <p>
 
212
                Si vous souhaitez tester un gestionnaire de formulaire mais que vous ne l'avez pas &eacute;crit ou que vous n'y avez pas encore acc&egrave;s, vous pouvez cr&eacute;er un envoi de formulaire &agrave; la main.
 
213
<pre>
 
214
class SimpleFormTests extends WebTestCase {
 
215
    ...<strong>    
 
216
    function testAttemptedHack() {
 
217
        $this-&gt;post(
 
218
                'http://www.my-site.com/add_user.php',
 
219
                array('type' =&gt; 'superuser'));
 
220
        $this-&gt;assertNoUnwantedPattern('/user created/i');
 
221
    }</strong>
 
222
}
 
223
</pre>
 
224
                En ajoutant des donn&eacute;es &agrave; la m&eacute;thode <span class="new_code">WebTestCase::post()</span>, nous essayons de t&eacute;l&eacute;charger la page via la transmission d'un formulaire.
 
225
            </p>
 
226
        
 
227
    </div>
 
228
<div class="copyright">
 
229
            Copyright<br>Marcus Baker, Jason Sweat, Perrick Penet 2004
 
230
        </div>
 
231
</body>
 
232
</html>