You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/01-getting-started/2-manuals-specifications/article.md
+5-7
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,6 @@
1
-
2
1
# Manual dan spesifikasi
3
2
4
-
Buku ini adalah *tutorial*. Tujuannya membantu kamu memahami bahasa ini pelan-pelan. Tapi sekali kamu akrab dengan dasarnya, kamu butuh sumber lain.
3
+
Buku ini adalah _tutorial_. Tujuannya membantu kamu memahami bahasa ini (Javascript) pelan-pelan. Tapi sekali kamu akrab atau familiar dengan dasarnya, kamu juga membutuhkan dari sumber-sumber lain.
5
4
6
5
## Spesifikasi
7
6
@@ -17,14 +16,13 @@ Juga, jika kamu dalam pengembangan untuk peramban, maka ada spek lain yang dibah
17
16
18
17
## Manual
19
18
20
-
-**Referensi JavaScript MDN (Mozilla)** ialah manual dengan informasi dan contoh lain. Di sana bagus untuk mendapat informasi mendalam tentang metode, fungsi bahasa, dll.
19
+
-**Referensi JavaScript MDN (Mozilla)** ialah manual dengan informasi dan contoh lain. Di sana bagus untuk mendapat informasi mendalam tentang metode, fungsi bahasa, dll.
21
20
22
21
Kamu bisa cari di <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference>.
23
22
24
23
Meski, sering lebih bagus menggunakan pencarian internet. Pakai "MDN [term]" di query, misal <https://google.com/search?q=MDN+parseInt> untuk mencari fungsi `parseInt`.
25
24
26
-
27
-
-**MSDN** – Manual Microsoft dengan banyak informasi, termasuk JavaScript (sering dirujuk sebagai JScript). Jika kamu butuh sesuatu yang spesifik ke Internet Explorer, lebih baik pergi ke: <http://msdn.microsoft.com/>.
25
+
-**MSDN** – Manual Microsoft dengan banyak informasi, termasuk JavaScript (sering dirujuk sebagai JScript). Jika kamu butuh sesuatu yang spesifik ke Internet Explorer, lebih baik pergi ke: <http://msdn.microsoft.com/>.
28
26
29
27
Juga, kamu bisa menggunakan pencarian internet dengan frasa seperti "RegExp MSDN" atau "RegExp MSDN jscript".
30
28
@@ -34,8 +32,8 @@ JavaScript merupakan bahasa berkembang, fitur baru ditambah secara reguler.
34
32
35
33
Untuk melihat dukungan mereka pada engine berbasis peramban dan lainnya, lihat:
36
34
37
-
-<http://caniuse.com> - tabel dukungan per-fitur, misal untuk melihat engine mana yang mendukung fungsi kryptografi modern: <http://caniuse.com/#feat=cryptography>.
38
-
-<https://kangax.github.io/compat-table> - tabel dengan fitur dan engine bahasa yang mendukung atau yang tidak mendukung.
35
+
-<http://caniuse.com> - tabel dukungan per-fitur, misal untuk melihat engine mana yang mendukung fungsi kryptografi modern: <http://caniuse.com/#feat=cryptography>.
36
+
-<https://kangax.github.io/compat-table> - tabel dengan fitur dan engine bahasa yang mendukung atau yang tidak mendukung.
39
37
40
38
Semua sumber ini berguna di pengembangan nyata, karena mereka berisi informasi berharga tentang detil bahasa, dukungan mereka dll.
Copy file name to clipboardExpand all lines: 1-js/03-code-quality/05-testing-mocha/article.md
+41-49
Original file line number
Diff line number
Diff line change
@@ -36,28 +36,23 @@ Tugas itu cuma contoh: ada operator `**` di JavaScript yang bisa melakukan itu,
36
36
37
37
Sebelum membuat kode `pow`, kita bisa bayangkan apa yang harus dilakukan fungsi itu dan menjelaskannya.
38
38
39
-
Deskripsi begitu disebut *spesifikasi* atau, singkatnya, spek, dan berisi deskripsi use case bersama dengan tes untuk mereka, seperti ini:
39
+
Deskripsi begitu disebut _spesifikasi_ atau, singkatnya, spek, dan berisi deskripsi use case bersama dengan tes untuk mereka, seperti ini:
40
40
41
41
```js
42
-
describe("pow", function() {
43
-
44
-
it("raises to n-th power", function() {
42
+
describe("pow", function () {
43
+
it("raises to n-th power", function () {
45
44
assert.equal(pow(2, 3), 8);
46
45
});
47
-
48
46
});
49
47
```
50
48
51
49
Spek punya tiga blok bangunan utama yang bisa kamu lihat di bawah:
52
50
53
-
`describe("title", function() { ... })`
54
-
: Fungsionalitas apa yang kita jelaskan. Di kasus ini kita akan menjelaskan fungsi `pow`. Dipakai untuk mengelompokkan "pekerja" -- blok `it`.
51
+
`describe("title", function() { ... })` : Fungsionalitas apa yang kita jelaskan. Di kasus ini kita akan menjelaskan fungsi `pow`. Dipakai untuk mengelompokkan "pekerja" -- blok `it`.
55
52
56
-
`it("use case description", function() { ... })`
57
-
: Di judul `it` kita *dalam bahasa manusia* menjelaskan use case tertentu, dan argumen kedua ialah fungsi yang mengetes itu.
53
+
`it("use case description", function() { ... })` : Di judul `it` kita _dalam bahasa manusia_ menjelaskan use case tertentu, dan argumen kedua ialah fungsi yang mengetes itu.
58
54
59
-
`assert.equal(value1, value2)`
60
-
: Kode di dalam blok `it`, jika implementasinya benar, harus berjalan tanpa galat.
55
+
`assert.equal(value1, value2)` : Kode di dalam blok `it`, jika implementasinya benar, harus berjalan tanpa galat.
61
56
62
57
Fungsi `assert.*` dipakai untuk mengecek apakah `pow` bekerja sesuai harapan. Tepat di sini kita memakai salah satunya -- `assert.equal`, ia membandingkan argumen dan menghasilkan galat jika mereka tak sama. Di sini ia mengecek apakah hasil `pow(2, 3)` sama dengan `8`. Ada tipe perbandingan dan pengecekan lain, yang akan kita tambah nanti.
63
58
@@ -75,7 +70,7 @@ Alur pengembangan biasanya seperti ini:
75
70
6. Pergi ke 3, perbaharui implementasinya hingga tes tak memberikan galat.
76
71
7. Ulangi langkah 3-6 hingga fungsionalitasnya siap.
77
72
78
-
Jadi, pengembangannya *iteratif*. Kita tulis spek, implementasikan, memastikan tes lulus, lalu menulis tes lainnya, memastikan mereka bekerja dll. Akhirnya kita punya implementasi yang bekerja dan tes untuk itu.
73
+
Jadi, pengembangannya _iteratif_. Kita tulis spek, implementasikan, memastikan tes lulus, lalu menulis tes lainnya, memastikan mereka bekerja dll. Akhirnya kita punya implementasi yang bekerja dan tes untuk itu.
79
74
80
75
Ayo lihat alur pengembangan ini di kasus praktik kita.
81
76
@@ -86,19 +81,20 @@ Langkap pertama sudah lengkap: kita punya spek inisial untuk `pow`. Sekarang, se
86
81
Di sini di tutorial ini kita akan memakai librari JavaScript untuk tes:
87
82
88
83
-[Mocha](http://mochajs.org/) -- inti framework: menyediakan fungsi testing umum `describe` dan `it` dan fungsi utama yang menjalankan test.
89
-
-[Chai](http://chaijs.com) -- library dengan banyak penambahan. Ini membuatmu bisa untuk menggunakan banyak penambahan yang berbeda, untuk sekarang kita hanya membutuhkan `assert.equal`.
90
-
-[Sinon](http://sinonjs.org/) -- sebuah library untuk memata-matai fungsi, meniru fungsi bawaan dan lainnya, kita akan butuh ini nanti.
84
+
-[Chai](http://chaijs.com) -- librari dengan banyak penambahan. Ini membuatmu bisa untuk menggunakan banyak penambahan yang berbeda, untuk sekarang kita hanya membutuhkan `assert.equal`.
85
+
-[Sinon](http://sinonjs.org/) -- sebuah librari untuk memata-matai fungsi, meniru fungsi bawaan dan lainnya, kita akan butuh ini nanti.
91
86
92
87
Librari ini cocok baik untuk pengetesan in-browser dan server-side. Di sini kita akan mempertimbangkan varian peramban.
93
88
94
89
Laman HTML lengkap dengan framework ini dan spek `pow`:
95
90
96
91
```html src="index.html"
92
+
97
93
```
98
94
99
95
Laman ini bisa dibagi jadi lima bagian:
100
96
101
-
1.`<head>` -- menambah libraru dan gaya pihak-ketiga untuk tes.
97
+
1.`<head>` -- menambah librari dan gaya pihak-ketiga untuk tes.
102
98
2.`<script>` dengan fungsi untuk dites, di kasus kita -- degngan kode untuk `pow`.
103
99
3. Tes -- di kasus kita script external `test.js` yang punya `describe("pow", ...)` dari atas.
104
100
4. Elemen HTML `<div id="mocha">` akan dipakai untuk mengoutputkan hasil.
@@ -138,33 +134,32 @@ Kita bisa pilih salah satu cara mengorganisasikan tes di sini:
138
134
139
135
1. Varian pertama -- tambah satu lagi `assert` ke dalam `it` yang sama:
140
136
141
-
```js
142
-
describe("pow", function() {
137
+
```js
138
+
describe("pow", function() {
143
139
144
-
it("raises to n-th power", function() {
145
-
assert.equal(pow(2, 3), 8);
146
-
*!*
147
-
assert.equal(pow(3, 4), 81);
148
-
*/!*
149
-
});
140
+
it("raises to n-th power", function() {
141
+
assert.equal(pow(2, 3), 8);
142
+
*!*
143
+
assert.equal(pow(3, 4), 81);
144
+
*/!*
145
+
});
146
+
147
+
});
148
+
```
150
149
151
-
});
152
-
```
153
150
2. Kedua -- buat dua tes:
154
151
155
-
```js
156
-
describe("pow", function() {
152
+
```js
153
+
describe("pow", function () {
154
+
it("2 raised to power 3 is 8", function () {
155
+
assert.equal(pow(2, 3), 8);
156
+
});
157
157
158
-
it("2 raised to power 3 is 8", function() {
159
-
assert.equal(pow(2, 3), 8);
160
-
});
161
-
162
-
it("3 raised to power 4 is 81", function() {
163
-
assert.equal(pow(3, 4), 81);
164
-
});
165
-
166
-
});
167
-
```
158
+
it("3 raised to power 4 is 81", function () {
159
+
assert.equal(pow(3, 4), 81);
160
+
});
161
+
});
162
+
```
168
163
169
164
Perbedaan prinsipal ialah saat `assert` memicu galat, blok `it` segera berhenti. Jadi, di varian pertama jika `assert` pertama gagal, maka kita takkan pernah melihat hasil `assert` kedua.
170
165
@@ -203,19 +198,17 @@ function pow(x, n) {
203
198
Untuk yakin bahwa fungsi bekerja dengan baik, ayo kita tes dia dengan lebih banyak nilai. Daripada menulis blok `it` secara manual, kita bisa menggenerate mereka di `for`:
204
199
205
200
```js
206
-
describe("pow", function() {
207
-
201
+
describe("pow", function () {
208
202
functionmakeTest(x) {
209
203
let expected = x * x * x;
210
-
it(`${x} in the power 3 is ${expected}`, function() {
204
+
it(`${x} in the power 3 is ${expected}`, function() {
Di masa depan kita bisa menambah lebih banyak `it` dan `describe` di level tertinggi dengan fungsi pembantu mereka sendiri, mereka takkan melihat `makeTest`.
263
256
264
-
````smart header="`before/after` dan `beforeEach/afterEach`"
265
-
Kita bisa mengeset fungsi `before/after` yang berjalan sebelum/setelah menjalankan tes, dan juga fungsi `beforeEach/afterEach` yang berjalan sebelum/setelah *setiap*`it`.
257
+
````smart header="`before/after`dan`beforeEach/afterEach`" Kita bisa mengeset fungsi `before/after`yang berjalan sebelum/setelah menjalankan tes, dan juga fungsi`beforeEach/afterEach`yang berjalan sebelum/setelah *setiap*`it`.
266
258
267
259
Misalnya:
268
260
269
261
```js no-beautify
270
-
describe("test", function() {
271
-
262
+
describe("test", function () {
272
263
before(() =>alert("Testing started – before all tests"));
273
264
after(() =>alert("Testing finished – after all tests"));
274
265
275
266
beforeEach(() =>alert("Before a test – enter a test"));
276
267
afterEach(() =>alert("After a test – exit a test"));
277
268
278
-
it('test 1', () => alert(1));
279
-
it('test 2', () => alert(2));
280
-
269
+
it("test 1", () =>alert(1));
270
+
it("test 2", () =>alert(2));
281
271
});
282
272
```
283
273
@@ -297,6 +287,7 @@ Tes selesai – setelah semua tes (after)
297
287
[edit src="beforeafter" title="Buka contoh di sandbox."]
298
288
299
289
Biasanya, `beforeEach/afterEach` dan `before/after` dipakai untuk melakukan inisialisasi, mengnolkan counter atau melakukan sesuatu di antara tes (atau grup tes).
290
+
300
291
````
301
292
302
293
## Mengextend spek
@@ -322,7 +313,7 @@ describe("pow", function() {
322
313
323
314
it("untuk n non-integer hasilnya NaN", function() {
324
315
*!*
325
-
assert.isNaN(pow(2, 1.5));
316
+
assert.isNaN(pow(2, 1.5));
326
317
*/!*
327
318
});
328
319
@@ -407,3 +398,4 @@ Di kehidupan riil kadang tak mudah. Kadang sulit menulis spek sebelum kode aktua
407
398
Nanti di tutorial ini kamu akan menemui banyak tugas dengan tes yang matang. Jadi kamu akan melihat banyak contoh praktik.
408
399
409
400
Menulis tes membutuhkan pengetahuan JavaScript yang baik. Tapi kita baru saja mulai belajar. Jadi, supaya settle semuanya, dari sekarang kamu belum wajib menulis tes, tapi kamu harus sudah bisa membaca mereka meski mereka agak rumit dari yang ada di bab ini.
0 commit comments