From 4a83ba830e4c0b6b8af0e055f65b0730594da082 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Thu, 23 Feb 2023 08:11:16 +0700 Subject: [PATCH 01/42] Update article.md --- .../05-testing-mocha/article.md | 270 +++++++++--------- 1 file changed, 135 insertions(+), 135 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index 68ffcae4d..f438bb14e 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -1,42 +1,42 @@ -# Automated testing with Mocha +# Kiểm tra tự động với Mocha -Automated testing will be used in further tasks, and it's also widely used in real projects. +Kiểm tra tự động sẽ được sử dụng trong các tác vụ tiếp theo và nó cũng được sử dụng rộng rãi trong các dự án thực tế. -## Why we need tests? +## Tại sao chúng ta cần thuwr nghiệm? -When we write a function, we can usually imagine what it should do: which parameters give which results. +Khi chúng ta viết một hàm, chúng ta thường có thể hình dung nó sẽ làm gì: tham số nào cho kết quả nào. -During development, we can check the function by running it and comparing the outcome with the expected one. For instance, we can do it in the console. +Trong quá trình phát triển, chúng ta có thể kiểm tra chức năng bằng cách chạy nó và so sánh kết quả với kết quả mong đợi. Chẳng hạn, chúng ta có thể làm điều đó trong bảng điều khiển. -If something is wrong -- then we fix the code, run again, check the result -- and so on till it works. +Nếu có điều gì sai -- thì ta sửa mã, chạy lại, kiểm tra kết quả -- và cứ thế cho đến khi nó hoạt động. -But such manual "re-runs" are imperfect. +Nhưng "chạy lại" thủ công như vậy là không hoàn hảo. -**When testing a code by manual re-runs, it's easy to miss something.** +**Khi kiểm tra mã bằng cách chạy lại thủ công, rất dễ bỏ sót điều gì đó.** -For instance, we're creating a function `f`. Wrote some code, testing: `f(1)` works, but `f(2)` doesn't work. We fix the code and now `f(2)` works. Looks complete? But we forgot to re-test `f(1)`. That may lead to an error. +Chẳng hạn, chúng ta đang tạo một hàm `f`. Đã viết một số mã, thử nghiệm: `f(1)` hoạt động, nhưng `f(2)` không hoạt động. Chúng ta sửa mã và bây giờ `f(2)` hoạt động. Có vẻ hoàn chỉnh? Nhưng chúng ta đã quên kiểm tra lại `f(1)`. Điều đó có thể dẫn đến một lỗi. -That's very typical. When we develop something, we keep a lot of possible use cases in mind. But it's hard to expect a programmer to check all of them manually after every change. So it becomes easy to fix one thing and break another one. +Điều đó rất điển hình. Khi chúng ta phát triển một thứ gì đó, chúng ta ghi nhớ rất nhiều trường hợp sử dụng có thể xảy ra. Nhưng thật khó để mong đợi một lập trình viên kiểm tra tất cả chúng một cách thủ công sau mỗi lần thay đổi. Vì vậy, nó trở nên dễ dàng để sửa chữa một thứ và phá vỡ một thứ khác. -**Automated testing means that tests are written separately, in addition to the code. They run our functions in various ways and compare results with the expected.** +**Kiểm tra tự động có nghĩa là các kiểm tra được viết riêng, bên cạnh mã. Chúng chạy các chức năng của chúng tôi theo nhiều cách khác nhau và so sánh kết quả với kết quả mong đợi.** ## Behavior Driven Development (BDD) -Let's start with a technique named [Behavior Driven Development](http://en.wikipedia.org/wiki/Behavior-driven_development) or, in short, BDD. +Hãy bắt đầu với một kỹ thuật có tên [Behavior Driven Development](http://en.wikipedia.org/wiki/Behavior-driven_development) or, in short, BDD. -**BDD is three things in one: tests AND documentation AND examples.** +****BDD là ba thứ trong một: thử nghiệm VÀ tài liệu VÀ ví dụ.** -To understand BDD, we'll examine a practical case of development. +Để hiểu BDD, chúng ta sẽ xem xét một trường hợp phát triển thực tế. -## Development of "pow": the spec +## Phát triển "pow": thông số kỹ thuật -Let's say we want to make a function `pow(x, n)` that raises `x` to an integer power `n`. We assume that `n≥0`. +Giả sử chúng ta muốn tạo một hàm `pow(x, n)` nâng `x` lên một lũy thừa nguyên `n`. Chúng ta giả định rằng `n≥0`. -That task is just an example: there's the `**` operator in JavaScript that can do that, but here we concentrate on the development flow that can be applied to more complex tasks as well. +Tác vụ đó chỉ là một ví dụ: có toán tử `**` trong JavaScript có thể làm điều đó, nhưng ở đây chúng ta tập trung vào quy trình phát triển cũng có thể được áp dụng cho các tác vụ phức tạp hơn. -Before creating the code of `pow`, we can imagine what the function should do and describe it. +Trước khi tạo mã của `pow`, chúng ta có thể hình dung chức năng này sẽ làm gì và mô tả nó. -Such description is called a *specification* or, in short, a spec, and contains descriptions of use cases together with tests for them, like this: +Mô tả như vậy được gọi là *đặc điểm kỹ thuật* hay nói ngắn gọn là thông số kỹ thuật và chứa mô tả về các trường hợp sử dụng cùng với các thử nghiệm dành cho chúng, như sau: ```js describe("pow", function() { @@ -48,95 +48,95 @@ describe("pow", function() { }); ``` -A spec has three main building blocks that you can see above: +Một thông số kỹ thuật có ba khối xây dựng chính mà bạn có thể thấy ở trên: `describe("title", function() { ... })` -: What functionality we're describing. In our case we're describing the function `pow`. Used to group "workers" -- the `it` blocks. +: Chúng ta đang mô tả chức năng gì. Trong trường hợp của chúng ta, chúng ta đang mô tả hàm `pow`. Được sử dụng để nhóm "công nhân" -- các khối `it`. `it("use case description", function() { ... })` -: In the title of `it` we *in a human-readable way* describe the particular use case, and the second argument is a function that tests it. +: Trong tiêu đề của `it`, chúng ta *theo cách mà con người có thể đọc được* mô tả trường hợp sử dụng cụ thể và đối số thứ hai là một hàm kiểm tra trường hợp đó. `assert.equal(value1, value2)` -: The code inside `it` block, if the implementation is correct, should execute without errors. +: Mã bên trong khối `it`, nếu triển khai đúng, sẽ thực thi mà không có lỗi. - Functions `assert.*` are used to check whether `pow` works as expected. Right here we're using one of them -- `assert.equal`, it compares arguments and yields an error if they are not equal. Here it checks that the result of `pow(2, 3)` equals `8`. There are other types of comparisons and checks, that we'll add later. + Hàm `assert.*` được sử dụng để kiểm tra xem `pow` có hoạt động như mong đợi hay không. Ngay tại đây, chúng ta đang sử dụng một trong số chúng -- `assert.equal`, nó so sánh các đối số và đưa ra lỗi nếu chúng không bằng nhau. Tại đây, nó kiểm tra xem kết quả của `pow(2, 3)` có bằng `8` hay không. Có nhiều loại so sánh và kiểm tra khác mà chúng ta sẽ bổ sung sau. -The specification can be executed, and it will run the test specified in `it` block. We'll see that later. +Thông số kỹ thuật có thể được thực thi và nó sẽ chạy thử nghiệm được chỉ định trong khối `it`. Chúng ta sẽ thấy điều đó sau. -## The development flow +## Dòng chảy phát triển -The flow of development usually looks like this: +Dòng phát triển thường trông như thế này: -1. An initial spec is written, with tests for the most basic functionality. -2. An initial implementation is created. -3. To check whether it works, we run the testing framework [Mocha](http://mochajs.org/) (more details soon) that runs the spec. While the functionality is not complete, errors are displayed. We make corrections until everything works. -4. Now we have a working initial implementation with tests. -5. We add more use cases to the spec, probably not yet supported by the implementations. Tests start to fail. -6. Go to 3, update the implementation till tests give no errors. -7. Repeat steps 3-6 till the functionality is ready. +1. Thông số kỹ thuật ban đầu được viết, với các bài kiểm tra chức năng cơ bản nhất. +2. Triển khai ban đầu được tạo. +3. Để kiểm tra xem nó có hoạt động hay không, chúng ta chạy framework thử nghiệm [Mocha](http://mochajs.org/) (sẽ sớm có thêm thông tin chi tiết) để chạy thông số kỹ thuật đó. Trong khi chức năng không hoàn thành, lỗi được hiển thị. Chúng ta thực hiện chỉnh sửa cho đến khi mọi thứ hoạt động. +4. Bây giờ chúng ta có một thực hiện ban đầu đang hoạt động với kiểm tra. +5. Chúng ta thêm nhiều trường hợp sử dụng hơn vào thông số kỹ thuật, có thể chưa được triển khai hỗ trợ. Các thử nghiệm bắt đầu thất bại. +6. Đến bước 3, cập nhật việc triển khai cho đến khi kiểm tra không có lỗi. +7. Lặp lại các bước 3-6 cho đến khi chức năng sẵn sàng. -So, the development is *iterative*. We write the spec, implement it, make sure tests pass, then write more tests, make sure they work etc. At the end we have both a working implementation and tests for it. +Vì vậy, sự phát triển là * lặp đi lặp lại *. Chúng ta viết thông số kỹ thuật, triển khai nó, đảm bảo vượt qua các bài kiểm tra, sau đó viết thêm các bài kiểm tra khác, đảm bảo chúng hoạt động, v.v. Cuối cùng, chúng ta có cả một triển khai hoạt động và các bài kiểm tra cho nó. -Let's see this development flow in our practical case. +Hãy xem dòng phát triển này trong trường hợp thực tế của chúng ta. -The first step is already complete: we have an initial spec for `pow`. Now, before making the implementation, let's use few JavaScript libraries to run the tests, just to see that they are working (they will all fail). +Bước đầu tiên đã hoàn tất: chúng ta có thông số kỹ thuật ban đầu cho `pow`. Bây giờ, trước khi thực hiện, hãy sử dụng một số thư viện JavaScript để chạy thử nghiệm, chỉ để xem chúng có hoạt động không (tất cả chúng sẽ không thành công). -## The spec in action +## Thông số kỹ thuật hoạt động -Here in the tutorial we'll be using the following JavaScript libraries for tests: +Ở đây trong hướng dẫn này, chúng ta sẽ sử dụng các thư viện JavaScript sau để kiểm tra: -- [Mocha](http://mochajs.org/) -- the core framework: it provides common testing functions including `describe` and `it` and the main function that runs tests. -- [Chai](http://chaijs.com) -- the library with many assertions. It allows to use a lot of different assertions, for now we need only `assert.equal`. -- [Sinon](http://sinonjs.org/) -- a library to spy over functions, emulate built-in functions and more, we'll need it much later. +- [Mocha](http://mochajs.org/) -- framework cốt lõi: nó cung cấp các hàm thử nghiệm phổ biến bao gồm `describe` và `it` và hàm chính chạy thử nghiệm. +- [Chai](http://chaijs.com) -- thư viện có nhiều xác nhận. Nó cho phép sử dụng rất nhiều xác nhận khác nhau, bây giờ chúng ta chỉ cần `assert.equal`. +- [Sinon](http://sinonjs.org/) -- một thư viện để theo dõi các chức năng, mô phỏng các chức năng tích hợp sẵn và hơn thế nữa, chúng ta sẽ cần đến nó sau này. -These libraries are suitable for both in-browser and server-side testing. Here we'll consider the browser variant. +Các thư viện này phù hợp cho cả thử nghiệm trên trình duyệt và phía máy chủ. Ở đây chúng tôi sẽ xem xét biến thể trình duyệt. -The full HTML page with these frameworks and `pow` spec: +Trang HTML đầy đủ với các khung này và thông số kỹ thuật `pow`: ```html src="index.html" ``` -The page can be divided into five parts: +Trang này có thể được chia thành năm phần: -1. The `
` -- add third-party libraries and styles for tests. -2. The ` - + @@ -20,17 +20,17 @@ - + - + - + From 1cd8caca7e67336eeebb083dc3a9c0d5f5b838b8 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:52:47 +0700 Subject: [PATCH 03/42] Update task.md --- .../05-testing-mocha/3-pow-test-wrong/task.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md index 66fece09a..e672c965e 100644 --- a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md +++ b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md @@ -2,9 +2,9 @@ importance: 5 --- -# What's wrong in the test? +# Có gì sai trong bài kiểm tra? -What's wrong in the test of `pow` below? +Có gì sai trong bài kiểm tra `pow` bên dưới? ```js it("Raises x to the power n", function() { @@ -21,4 +21,4 @@ it("Raises x to the power n", function() { }); ``` -P.S. Syntactically the test is correct and passes. +Tái bút: Về mặt cú pháp, bài kiểm tra là chính xác và đỗ. From d28983b102b40dfbb82d80a7d9b8ddd5b0bc482a Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:54:59 +0700 Subject: [PATCH 04/42] Update solution.md --- .../3-pow-test-wrong/solution.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md index 4d0571b9d..ec85999be 100644 --- a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md +++ b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md @@ -1,14 +1,14 @@ -The test demonstrates one of the temptations a developer meets when writing tests. +Bài kiểm tra thể hiện một trong những cám dỗ mà nhà phát triển gặp phải khi viết bài kiểm tra. -What we have here is actually 3 tests, but layed out as a single function with 3 asserts. +Những gì chúng ta có ở đây thực sự là 3 bài kiểm tra, nhưng được bố trí dưới dạng một chức năng duy nhất với 3 lần xác nhận. -Sometimes it's easier to write this way, but if an error occurs, it's much less obvious what went wrong. +Đôi khi viết theo cách này dễ dàng hơn, nhưng nếu có lỗi xảy ra, thì sẽ khó nhận ra điều gì đã xảy ra. -If an error happens in the middle of a complex execution flow, then we'll have to figure out the data at that point. We'll actually have to *debug the test*. +Nếu xảy ra lỗi ở giữa quy trình thực thi phức tạp, thì chúng ta sẽ phải tìm ra dữ liệu tại thời điểm đó. Chúng ta thực sự sẽ phải *gỡ lỗi cho bài thử nghiệm*. -It would be much better to break the test into multiple `it` blocks with clearly written inputs and outputs. +Sẽ tốt hơn nhiều nếu chia bài kiểm tra thành nhiều khối `it` với đầu vào và đầu ra được viết rõ ràng. -Like this: +Như thế này: ```js describe("Raises x to power n", function() { it("5 in the power of 1 equals 5", function() { @@ -25,9 +25,9 @@ describe("Raises x to power n", function() { }); ``` -We replaced the single `it` with `describe` and a group of `it` blocks. Now if something fails we would see clearly what the data was. +Chúng ta đã thay thế một khối `it` bằng `describe` và một nhóm các khối `it`. Bây giờ nếu có gì đó không thành công, chúng ta sẽ thấy rõ ràng dữ liệu là gì. -Also we can isolate a single test and run it in standalone mode by writing `it.only` instead of `it`: +Ngoài ra, chúng ta có thể tách riêng một bài kiểm tra và chạy nó ở chế độ độc lập bằng cách viết `it.only` thay vì `it`: ```js @@ -37,7 +37,7 @@ describe("Raises x to power n", function() { }); *!* - // Mocha will run only this block + // Mocha sẽ chỉ chạy block này it.only("5 in the power of 2 equals 25", function() { assert.equal(pow(5, 2), 25); }); From d5b7318afea7e3210141faa7816ff2bd2e85d63c Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:57:21 +0700 Subject: [PATCH 05/42] Update test.js --- .../05-testing-mocha/beforeafter.view/test.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js index d3de82546..47d322547 100644 --- a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js +++ b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js @@ -1,16 +1,16 @@ describe("test", function() { - // Mocha usually waits for the tests for 2 seconds before considering them wrong + // Mocha thường đợi các bài kiểm tra trong 2 giây trước khi coi chúng sai - this.timeout(200000); // With this code we increase this - in this case to 200,000 milliseconds + this.timeout(200000); // Với mã này, chúng ta tăng mã này - trong trường hợp này là 200.000 mili giây - // This is because of the "alert" function, because if you delay pressing the "OK" button the tests will not pass! + // Điều này là do chức năng "cảnh báo", bởi vì nếu bạn trì hoãn nhấn nút "OK" thì các bài kiểm tra sẽ không vượt qua! - before(() => alert("Testing started – before all tests")); - after(() => alert("Testing finished – after all tests")); + before(() => alert("Bài kiểm tra bắt đầu – trước tất cả các bài kiểm tra")); + after(() => alert("Bài kiểm tra kết thúc – sau tất cả các bài kiểm tra")); - beforeEach(() => alert("Before a test – enter a test")); - afterEach(() => alert("After a test – exit a test")); + beforeEach(() => alert("Trước một bài kiểm tra – nhập một bài kiểm tra")); + afterEach(() => alert("Trước một bài kiểm tra – nhập một bài kiểm tra")); it('test 1', () => alert(1)); it('test 2', () => alert(2)); From c3c12867fb3669d5f854254d05610f56c1337e32 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:59:34 +0700 Subject: [PATCH 06/42] Update index.html --- .../05-testing-mocha/beforeafter.view/index.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html index e680b536b..242369d1a 100644 --- a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html @@ -1,31 +1,31 @@ - + - + - + - + - + - + From 4000563461dab1f0002076314ba18c0c623f5017 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:46:48 +0700 Subject: [PATCH 07/42] Update index.html --- .../05-testing-mocha/pow-1.view/index.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html index e48a8d3a2..0bb8c1977 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html @@ -1,18 +1,18 @@ - + - + - + @@ -21,17 +21,17 @@ - + - + - + From 4a9a8c2b09ecbc28a95eb10969f887abed99e6a0 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:47:08 +0700 Subject: [PATCH 08/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/index.html b/1-js/03-code-quality/05-testing-mocha/index.html index c25a6cc43..e14c87161 100644 --- a/1-js/03-code-quality/05-testing-mocha/index.html +++ b/1-js/03-code-quality/05-testing-mocha/index.html @@ -20,7 +20,7 @@ From 6802cf969445cbdba70433708dc7dda0aee49ebe Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:53:10 +0700 Subject: [PATCH 09/42] Update index.html --- .../05-testing-mocha/pow-2.view/index.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html index e8d6be23d..229488f5a 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html @@ -1,18 +1,18 @@ - + - + - + @@ -21,17 +21,17 @@ - + - + - + From b230aedf6d2e6ca746812811d395c991a19c6aaf Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:55:18 +0700 Subject: [PATCH 10/42] Update index.html --- .../05-testing-mocha/pow-3.view/index.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html index c71b0d5d5..8cd25ac7b 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html @@ -1,18 +1,18 @@ - + - + - + @@ -31,13 +31,13 @@ } - + - + - + From 7843e6e466579aaaa0008f6da4e69c5d7ba504d0 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:57:57 +0700 Subject: [PATCH 11/42] Update index.html --- .../05-testing-mocha/pow-4.view/index.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html index c71b0d5d5..8cd25ac7b 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html @@ -1,18 +1,18 @@ - + - + - + @@ -31,13 +31,13 @@ } - + - + - + From 3017a30e6a2a2047ba4366245dbab41a1ecbd8ce Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 17:58:25 +0700 Subject: [PATCH 12/42] Update test.js --- 1-js/03-code-quality/05-testing-mocha/pow-4.view/test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-4.view/test.js b/1-js/03-code-quality/05-testing-mocha/pow-4.view/test.js index e5ce2ce43..dc8660071 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-4.view/test.js +++ b/1-js/03-code-quality/05-testing-mocha/pow-4.view/test.js @@ -15,5 +15,5 @@ describe("pow", function() { }); - // ... more tests to follow here, both describe and it can be added + // ... nhiều bài kiểm tra để theo dõi ở đây, cả describe và it có thể được thêm vào }); From 689c1053546df7f26c27665dbcab91433830cb6e Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 18:34:01 +0700 Subject: [PATCH 13/42] Update index.html --- .../05-testing-mocha/pow-full.view/index.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html index 076b1e5a9..344ddcf34 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html @@ -1,18 +1,18 @@ - + - + - + @@ -32,13 +32,13 @@ } - + - + - + From fbc2fc9d61876e13e12f62fd30d0569e79b458bf Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 18:39:32 +0700 Subject: [PATCH 14/42] Update index.html --- .../05-testing-mocha/pow-min.view/index.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html index d82a79dca..721df100e 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html @@ -1,18 +1,18 @@ - + - + - + @@ -21,17 +21,17 @@ - + - + - + From 67d6fd525d98838c6817516619df573ed0a3b64c Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Tue, 28 Feb 2023 18:41:43 +0700 Subject: [PATCH 15/42] Update index.html --- .../05-testing-mocha/pow-nan.view/index.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html index 523ae25ec..bee314d04 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html @@ -1,18 +1,18 @@ - + - + - + @@ -29,13 +29,13 @@ } - + - + - + From 7a19c9dc5f304b92a81313d72dfcb75e11dd06c0 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Thu, 2 Mar 2023 21:25:24 +0700 Subject: [PATCH 16/42] Update article.md --- 1-js/03-code-quality/05-testing-mocha/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index f438bb14e..30e2467fc 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -22,7 +22,7 @@ Chẳng hạn, chúng ta đang tạo một hàm `f`. Đã viết một số mã, ## Behavior Driven Development (BDD) -Hãy bắt đầu với một kỹ thuật có tên [Behavior Driven Development](http://en.wikipedia.org/wiki/Behavior-driven_development) or, in short, BDD. +Hãy bắt đầu với một kỹ thuật có tên [Behavior Driven Development](http://en.wikipedia.org/wiki/Behavior-driven_development) hoặc, ngắn gọn, BDD. ****BDD là ba thứ trong một: thử nghiệm VÀ tài liệu VÀ ví dụ.** From 43edb372242fcb4972b3c788da992f9162f54d6a Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Fri, 3 Mar 2023 07:49:07 +0700 Subject: [PATCH 17/42] Update article.md --- 1-js/03-code-quality/05-testing-mocha/article.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index 30e2467fc..a9eb8e264 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -2,7 +2,7 @@ Kiểm tra tự động sẽ được sử dụng trong các tác vụ tiếp theo và nó cũng được sử dụng rộng rãi trong các dự án thực tế. -## Tại sao chúng ta cần thuwr nghiệm? +## Tại sao chúng ta cần thử nghiệm? Khi chúng ta viết một hàm, chúng ta thường có thể hình dung nó sẽ làm gì: tham số nào cho kết quả nào. @@ -14,7 +14,7 @@ Nhưng "chạy lại" thủ công như vậy là không hoàn hảo. **Khi kiểm tra mã bằng cách chạy lại thủ công, rất dễ bỏ sót điều gì đó.** -Chẳng hạn, chúng ta đang tạo một hàm `f`. Đã viết một số mã, thử nghiệm: `f(1)` hoạt động, nhưng `f(2)` không hoạt động. Chúng ta sửa mã và bây giờ `f(2)` hoạt động. Có vẻ hoàn chỉnh? Nhưng chúng ta đã quên kiểm tra lại `f(1)`. Điều đó có thể dẫn đến một lỗi. +Chẳng hạn, chúng ta đang tạo một hàm `f`. Ta đã viết một số mã, thử nghiệm: `f(1)` hoạt động, nhưng `f(2)` không hoạt động. Chúng ta sửa mã và bây giờ `f(2)` hoạt động. Có vẻ hoàn chỉnh? Nhưng chúng ta đã quên kiểm tra lại `f(1)`. Điều đó có thể dẫn đến một lỗi. Điều đó rất điển hình. Khi chúng ta phát triển một thứ gì đó, chúng ta ghi nhớ rất nhiều trường hợp sử dụng có thể xảy ra. Nhưng thật khó để mong đợi một lập trình viên kiểm tra tất cả chúng một cách thủ công sau mỗi lần thay đổi. Vì vậy, nó trở nên dễ dàng để sửa chữa một thứ và phá vỡ một thứ khác. From dfb90da5b557f086c2d1984591474b182900a6da Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Fri, 3 Mar 2023 07:49:32 +0700 Subject: [PATCH 18/42] Update article.md --- 1-js/03-code-quality/05-testing-mocha/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index a9eb8e264..aa26f75d1 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -18,7 +18,7 @@ Chẳng hạn, chúng ta đang tạo một hàm `f`. Ta đã viết một số m Điều đó rất điển hình. Khi chúng ta phát triển một thứ gì đó, chúng ta ghi nhớ rất nhiều trường hợp sử dụng có thể xảy ra. Nhưng thật khó để mong đợi một lập trình viên kiểm tra tất cả chúng một cách thủ công sau mỗi lần thay đổi. Vì vậy, nó trở nên dễ dàng để sửa chữa một thứ và phá vỡ một thứ khác. -**Kiểm tra tự động có nghĩa là các kiểm tra được viết riêng, bên cạnh mã. Chúng chạy các chức năng của chúng tôi theo nhiều cách khác nhau và so sánh kết quả với kết quả mong đợi.** +**Kiểm tra tự động có nghĩa là các kiểm tra được viết riêng, bên cạnh mã. Chúng chạy các hàm của chúng ta theo nhiều cách khác nhau và so sánh kết quả với kết quả mong đợi.** ## Behavior Driven Development (BDD) From 1e01c55fc367cbc1b9b38298e63266104a4e871b Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Fri, 3 Mar 2023 07:50:39 +0700 Subject: [PATCH 19/42] Update article.md --- 1-js/03-code-quality/05-testing-mocha/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index aa26f75d1..1cd105bf2 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -36,7 +36,7 @@ Tác vụ đó chỉ là một ví dụ: có toán tử `**` trong JavaScript c Trước khi tạo mã của `pow`, chúng ta có thể hình dung chức năng này sẽ làm gì và mô tả nó. -Mô tả như vậy được gọi là *đặc điểm kỹ thuật* hay nói ngắn gọn là thông số kỹ thuật và chứa mô tả về các trường hợp sử dụng cùng với các thử nghiệm dành cho chúng, như sau: +Mô tả như vậy được gọi là *thông số kỹ thuật* hay nói ngắn gọn là thông số và chứa mô tả về các trường hợp sử dụng cùng với các thử nghiệm dành cho chúng, như sau: ```js describe("pow", function() { From 552b5cf416e1abeb76025ee9f34e6c2c295633b1 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Fri, 3 Mar 2023 08:18:59 +0700 Subject: [PATCH 20/42] Update article.md --- .../05-testing-mocha/article.md | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index 1cd105bf2..1922273b2 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -36,7 +36,7 @@ Tác vụ đó chỉ là một ví dụ: có toán tử `**` trong JavaScript c Trước khi tạo mã của `pow`, chúng ta có thể hình dung chức năng này sẽ làm gì và mô tả nó. -Mô tả như vậy được gọi là *thông số kỹ thuật* hay nói ngắn gọn là thông số và chứa mô tả về các trường hợp sử dụng cùng với các thử nghiệm dành cho chúng, như sau: +Mô tả như vậy được gọi là *thông số kỹ thuật* hay nói ngắn gọn là thông số và chứa mô tả về các trường hợp sử dụng cùng với các bài kiểm tra dành cho chúng, như sau: ```js describe("pow", function() { @@ -70,12 +70,12 @@ Dòng phát triển thường trông như thế này: 1. Thông số kỹ thuật ban đầu được viết, với các bài kiểm tra chức năng cơ bản nhất. 2. Triển khai ban đầu được tạo. 3. Để kiểm tra xem nó có hoạt động hay không, chúng ta chạy framework thử nghiệm [Mocha](http://mochajs.org/) (sẽ sớm có thêm thông tin chi tiết) để chạy thông số kỹ thuật đó. Trong khi chức năng không hoàn thành, lỗi được hiển thị. Chúng ta thực hiện chỉnh sửa cho đến khi mọi thứ hoạt động. -4. Bây giờ chúng ta có một thực hiện ban đầu đang hoạt động với kiểm tra. +4. Bây giờ chúng ta có một thực hiện ban đầu đang hoạt động với bài kiểm tra. 5. Chúng ta thêm nhiều trường hợp sử dụng hơn vào thông số kỹ thuật, có thể chưa được triển khai hỗ trợ. Các thử nghiệm bắt đầu thất bại. 6. Đến bước 3, cập nhật việc triển khai cho đến khi kiểm tra không có lỗi. 7. Lặp lại các bước 3-6 cho đến khi chức năng sẵn sàng. -Vì vậy, sự phát triển là * lặp đi lặp lại *. Chúng ta viết thông số kỹ thuật, triển khai nó, đảm bảo vượt qua các bài kiểm tra, sau đó viết thêm các bài kiểm tra khác, đảm bảo chúng hoạt động, v.v. Cuối cùng, chúng ta có cả một triển khai hoạt động và các bài kiểm tra cho nó. +Vì vậy, sự phát triển là * lặp đi lặp lại *. Chúng ta viết thông số kỹ thuật, triển khai nó, đảm bảo nó vượt qua các bài kiểm tra, sau đó viết thêm các bài kiểm tra khác, đảm bảo chúng hoạt động, v.v. Cuối cùng, chúng ta vừa có một triển khai hoạt động và các bài kiểm tra cho nó. Hãy xem dòng phát triển này trong trường hợp thực tế của chúng ta. @@ -89,7 +89,7 @@ Bước đầu tiên đã hoàn tất: chúng ta có thông số kỹ thuật ba - [Chai](http://chaijs.com) -- thư viện có nhiều xác nhận. Nó cho phép sử dụng rất nhiều xác nhận khác nhau, bây giờ chúng ta chỉ cần `assert.equal`. - [Sinon](http://sinonjs.org/) -- một thư viện để theo dõi các chức năng, mô phỏng các chức năng tích hợp sẵn và hơn thế nữa, chúng ta sẽ cần đến nó sau này. -Các thư viện này phù hợp cho cả thử nghiệm trên trình duyệt và phía máy chủ. Ở đây chúng tôi sẽ xem xét biến thể trình duyệt. +Các thư viện này phù hợp cho cả kiểm tra trên trình duyệt và phía máy chủ. Ở đây chúng ta sẽ xem xét biến thể trình duyệt. Trang HTML đầy đủ với các khung này và thông số kỹ thuật `pow`: @@ -99,7 +99,7 @@ Trang HTML đầy đủ với các khung này và thông số kỹ thuật `pow` Trang này có thể được chia thành năm phần: 1. `` -- thêm các thư viện và kiểu của bên thứ ba cho các bài kiểm tra. -2. ` - + From f30225ccdc8690ed87946ea36cb4989892acdc8a Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:40:39 +0700 Subject: [PATCH 26/42] Update index.html --- .../05-testing-mocha/beforeafter.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html index 242369d1a..9e7d915dc 100644 --- a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html @@ -19,7 +19,7 @@ - + From 1b8289fba03401672ced664ff556a5d17da2afac Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:42:45 +0700 Subject: [PATCH 27/42] Update test.js --- .../03-code-quality/05-testing-mocha/beforeafter.view/test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js index 47d322547..d4df8ad5f 100644 --- a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js +++ b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/test.js @@ -2,9 +2,9 @@ describe("test", function() { // Mocha thường đợi các bài kiểm tra trong 2 giây trước khi coi chúng sai - this.timeout(200000); // Với mã này, chúng ta tăng mã này - trong trường hợp này là 200.000 mili giây + this.timeout(200000); // Với mã này, chúng ta tăng cái này (timeout) - trong trường hợp này là 200.000 mili giây - // Điều này là do chức năng "cảnh báo", bởi vì nếu bạn trì hoãn nhấn nút "OK" thì các bài kiểm tra sẽ không vượt qua! + // Điều này là do hàm "alert", bởi vì nếu bạn trì hoãn nhấn nút "OK" thì các bài kiểm tra sẽ không vượt qua! before(() => alert("Bài kiểm tra bắt đầu – trước tất cả các bài kiểm tra")); after(() => alert("Bài kiểm tra kết thúc – sau tất cả các bài kiểm tra")); From c66c52ccddd0e03ca63bf20e874251f33f53a600 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:43:06 +0700 Subject: [PATCH 28/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html index 0bb8c1977..e96b6b531 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html @@ -25,7 +25,7 @@ } - + From 040d2d28958a26a5b54dc4877f559436a9b83e5b Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:43:26 +0700 Subject: [PATCH 29/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html index 229488f5a..54042abcb 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html @@ -25,7 +25,7 @@ } - + From f423ac63a382aa41ef4b59af3d3de62f7a33d86e Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:43:44 +0700 Subject: [PATCH 30/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html index 8cd25ac7b..9f68291a9 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html @@ -31,7 +31,7 @@ } - + From bba2ab3ed385c72a5f1aa6b12ec10f04d3f9fdcf Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:44:12 +0700 Subject: [PATCH 31/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html index 8cd25ac7b..5596b92cd 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-4.view/index.html @@ -6,7 +6,7 @@ @@ -31,7 +31,7 @@ } - + From f698b136e394f726871ec0b2723e8d6a1a5e4ae8 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:44:33 +0700 Subject: [PATCH 32/42] Update index.html --- .../03-code-quality/05-testing-mocha/pow-full.view/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html index 344ddcf34..43e362214 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-full.view/index.html @@ -6,7 +6,7 @@ @@ -32,7 +32,7 @@ } - + From 2b2cbad65be2a417af645831dcdcaad9b137e713 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:44:47 +0700 Subject: [PATCH 33/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html index 721df100e..d5514e388 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-min.view/index.html @@ -25,7 +25,7 @@ } - + From 553dfd264300d7093642abf40a921d0dcb2e5ae9 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:45:10 +0700 Subject: [PATCH 34/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html index bee314d04..ac3b8327a 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-nan.view/index.html @@ -6,7 +6,7 @@ @@ -29,7 +29,7 @@ } - + From 50750e915bfb3155dddc7f11a47a6e3ddeb527c1 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:47:34 +0700 Subject: [PATCH 35/42] Update solution.md --- .../3-pow-test-wrong/solution.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md index ec85999be..46715d863 100644 --- a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md +++ b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/solution.md @@ -1,25 +1,25 @@ Bài kiểm tra thể hiện một trong những cám dỗ mà nhà phát triển gặp phải khi viết bài kiểm tra. -Những gì chúng ta có ở đây thực sự là 3 bài kiểm tra, nhưng được bố trí dưới dạng một chức năng duy nhất với 3 lần xác nhận. +Những gì chúng ta có ở đây thực sự là 3 bài kiểm tra, nhưng được bố trí dưới dạng một hàm duy nhất với 3 lần xác nhận. Đôi khi viết theo cách này dễ dàng hơn, nhưng nếu có lỗi xảy ra, thì sẽ khó nhận ra điều gì đã xảy ra. -Nếu xảy ra lỗi ở giữa quy trình thực thi phức tạp, thì chúng ta sẽ phải tìm ra dữ liệu tại thời điểm đó. Chúng ta thực sự sẽ phải *gỡ lỗi cho bài thử nghiệm*. +Nếu xảy ra lỗi ở giữa quy trình thực thi phức tạp, thì chúng ta sẽ phải tìm ra dữ liệu tại thời điểm đó. Chúng ta thực sự sẽ phải *gỡ lỗi cho bài kiểm tra*. Sẽ tốt hơn nhiều nếu chia bài kiểm tra thành nhiều khối `it` với đầu vào và đầu ra được viết rõ ràng. Như thế này: ```js -describe("Raises x to power n", function() { - it("5 in the power of 1 equals 5", function() { +describe("Nâng x lên luỹ thừa n", function() { + it("5 mũ 1 bằng 5", function() { assert.equal(pow(5, 1), 5); }); - it("5 in the power of 2 equals 25", function() { + it("5 mũ 2 bằng 25", function() { assert.equal(pow(5, 2), 25); }); - it("5 in the power of 3 equals 125", function() { + it("5 mũ 3 bằng 125", function() { assert.equal(pow(5, 3), 125); }); }); @@ -31,19 +31,19 @@ Ngoài ra, chúng ta có thể tách riêng một bài kiểm tra và chạy nó ```js -describe("Raises x to power n", function() { - it("5 in the power of 1 equals 5", function() { +describe("Nâng x lên luỹ thừa n", function() { + it("5 mũ 1 bằng 5", function() { assert.equal(pow(5, 1), 5); }); *!* // Mocha sẽ chỉ chạy block này - it.only("5 in the power of 2 equals 25", function() { + it.only("5 mũ 2 bằng 25", function() { assert.equal(pow(5, 2), 25); }); */!* - it("5 in the power of 3 equals 125", function() { + it("5 mũ 3 bằng 125", function() { assert.equal(pow(5, 3), 125); }); }); From 38b5f2c2cfa9ef46c615123296e0c3513d83ef90 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:47:54 +0700 Subject: [PATCH 36/42] Update task.md --- 1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md index e672c965e..d33e45f2b 100644 --- a/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md +++ b/1-js/03-code-quality/05-testing-mocha/3-pow-test-wrong/task.md @@ -7,7 +7,7 @@ importance: 5 Có gì sai trong bài kiểm tra `pow` bên dưới? ```js -it("Raises x to the power n", function() { +it("Nâng x lên luỹ thừa n", function() { let x = 5; let result = x; From 8c22db569feb5947710c5667033a9652f78f2ed3 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:48:11 +0700 Subject: [PATCH 37/42] Update index.html --- .../05-testing-mocha/beforeafter.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html index 9e7d915dc..1f8e175e2 100644 --- a/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/beforeafter.view/index.html @@ -6,7 +6,7 @@ From ac1334dd54ab9cf74ecf3506e6bf57d79a123607 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:48:22 +0700 Subject: [PATCH 38/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html index e96b6b531..4b549f474 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-1.view/index.html @@ -6,7 +6,7 @@ From 51b63807acbe20cde83c13b72e6bfb617625f50a Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:48:32 +0700 Subject: [PATCH 39/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html index 54042abcb..8ec3889e2 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-2.view/index.html @@ -6,7 +6,7 @@ From 2cac56010288697711ee54a8a80a10fe7c7f8640 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:48:43 +0700 Subject: [PATCH 40/42] Update index.html --- 1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html b/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html index 9f68291a9..5596b92cd 100644 --- a/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html +++ b/1-js/03-code-quality/05-testing-mocha/pow-3.view/index.html @@ -6,7 +6,7 @@ From f0c867850652833472878dfa687e7bef7c4e9e0c Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:55:00 +0700 Subject: [PATCH 41/42] Update article.md --- .../05-testing-mocha/article.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index 43bba39fb..5836797eb 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -24,7 +24,7 @@ Chẳng hạn, chúng ta đang tạo một hàm `f`. Ta đã viết một số m Hãy bắt đầu với một kỹ thuật có tên [Behavior Driven Development](http://en.wikipedia.org/wiki/Behavior-driven_development) hoặc, ngắn gọn, BDD. -****BDD là ba thứ trong một: thử nghiệm VÀ tài liệu VÀ ví dụ.** +****BDD là ba thứ trong một: kiểm tra VÀ tài liệu VÀ ví dụ.** Để hiểu BDD, chúng ta sẽ xem xét một trường hợp phát triển thực tế. @@ -39,9 +39,9 @@ Trước khi tạo mã của `pow`, chúng ta có thể hình dung chức năng Mô tả như vậy được gọi là *thông số kỹ thuật* hay nói ngắn gọn là thông số và chứa mô tả về các trường hợp sử dụng cùng với các bài kiểm tra dành cho chúng, như sau: ```js -describe("pow", function() { +describe("luỹ thừa", function() { - it("luỹ thừa n", function() { + it("nâng lên mũ n", function() { assert.equal(pow(2, 3), 8); }); @@ -139,9 +139,9 @@ Chúng ta có thể lựa chọn một trong hai cách tổ chức kiểm tra t 1. Biến thể đầu tiên -- thêm một `assert` nữa vào cùng `it`: ```js - describe("pow", function() { + describe("luỹ thừa", function() { - it("raises to n-th power", function() { + it("nâng lên mũ n", function() { assert.equal(pow(2, 3), 8); *!* assert.equal(pow(3, 4), 81); @@ -153,13 +153,13 @@ Chúng ta có thể lựa chọn một trong hai cách tổ chức kiểm tra t 2. Thứ hai -- thực hiện hai bài kiểm tra: ```js - describe("pow", function() { + describe("luỹ thừa", function() { - it("2 raised to power 3 is 8", function() { + it("2 mũ 3 là 8", function() { assert.equal(pow(2, 3), 8); }); - it("3 raised to power 4 is 81", function() { + it("3 mũ 4 là 81", function() { assert.equal(pow(3, 4), 81); }); @@ -203,11 +203,11 @@ function pow(x, n) { Để chắc chắn rằng hàm hoạt động tốt, hãy kiểm tra nó để biết thêm giá trị. Thay vì viết các khối `it` theo cách thủ công, chúng ta có thể tạo chúng trong `for`: ```js -describe("pow", function() { +describe("luỹ thừa", function() { function makeTest(x) { let expected = x * x * x; - it(`${x} in the power 3 is ${expected}`, function() { + it(`${x} mũ 3 là ${expected}`, function() { assert.equal(pow(x, 3), expected); }); } @@ -230,10 +230,10 @@ Chúng ta sẽ thêm nhiều bài kiểm tra hơn nữa. Nhưng trước đó, h Việc nhóm lại được thực hiện với một `describe` lồng nhau: ```js -describe("pow", function() { +describe("luỹ thừa", function() { *!* - describe("raises x to power 3", function() { + describe("nâng x lên mũ 3", function() { */!* function makeTest(x) { @@ -267,7 +267,7 @@ Chúng ta có thể thiết lập các hàm `before/after` để thực thi trư Ví dụ: ```js no-beautify -describe("test", function() { +describe("kiểm tra", function() { before(() => alert("Bài kiểm tra bắt đầu – trước tất cả các bài kiểm tra")); after(() => alert("Bài kiểm tra kết thúc – sau tất cả các bài kiểm tra")); @@ -275,8 +275,8 @@ describe("test", function() { beforeEach(() => alert("Trước khi kiểm tra – nhập một bài kiểm tra")); afterEach(() => alert("Sau khi kiểm tra – xóa một bài kiểm tra")); - it('test 1', () => alert(1)); - it('test 2', () => alert(2)); + it('bài kiểm tra 1', () => alert(1)); + it('bài kiểm tra 2', () => alert(2)); }); ``` @@ -310,17 +310,17 @@ Như đã nói, hàm `pow(x, n)` có nghĩa là hoạt động với các giá t Trước tiên hãy thêm hành vi vào thông số kỹ thuật (!): ```js -describe("pow", function() { +describe("luỹ thừa", function() { // ... - it("for negative n the result is NaN", function() { + it("đối với n âm, kết quả là NaN", function() { *!* assert.isNaN(pow(2, -1)); */!* }); - it("for non-integer n the result is NaN", function() { + it("đối với n không nguyên, kết quả là NaN", function() { *!* assert.isNaN(pow(2, 1.5)); */!* @@ -336,7 +336,7 @@ Kết quả với các bài kiểm tra mới: Các bài kiểm tra mới được thêm vào không thành công vì quá trình triển khai của chúng ta không hỗ trợ chúng. Đó là cách BDD được thực hiện: đầu tiên chúng ta viết các bài kiểm tra không thành công, sau đó thực hiện triển khai cho chúng. ```smart header="Các khẳng định khác" -Vui lòng lưu ý xác nhận `assert.isNaN`: nó kiểm tra `NaN`. +Hãy lưu ý xác nhận `assert.isNaN`: nó kiểm tra `NaN`. Chẳng hạn, có các xác nhận khác trong [Chai](http://chaijs.com): @@ -353,8 +353,8 @@ Vì vậy, chúng ta nên thêm một vài dòng vào `pow`: ```js function pow(x, n) { *!* - if (n < 0) return NaN; - if (Math.round(n) != n) return NaN; + nếu (n < 0) trả về NaN; + nếu (Math.round(n) != n) trả về NaN; */!* let result = 1; From aaea55251989a9785a3271657da417273e980402 Mon Sep 17 00:00:00 2001 From: I_am_Vietnam <91591390+ImVietnam@users.noreply.github.com> Date: Wed, 7 Jun 2023 21:52:02 +0700 Subject: [PATCH 42/42] Update article.md --- 1-js/03-code-quality/05-testing-mocha/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/03-code-quality/05-testing-mocha/article.md b/1-js/03-code-quality/05-testing-mocha/article.md index 5836797eb..071f396ad 100644 --- a/1-js/03-code-quality/05-testing-mocha/article.md +++ b/1-js/03-code-quality/05-testing-mocha/article.md @@ -69,7 +69,7 @@ Dòng phát triển thường trông như thế này: 1. Thông số kỹ thuật ban đầu được viết, với các bài kiểm tra hàm cơ bản nhất. 2. Triển khai ban đầu được tạo. -3. Để kiểm tra xem nó có hoạt động hay không, chúng ta chạy framework kiểm tra [Mocha](http://mochajs.org/) (sẽ sớm có thêm thông tin chi tiết) để chạy thông số kỹ thuật đó. Trong khi hàm không hoàn thành, lỗi được hiển thị. Chúng ta thực hiện chỉnh sửa cho đến khi mọi thứ hoạt động. +3. Để kiểm tra xem nó có hoạt động hay không, chúng ta chạy framework kiểm tra [Mocha](https://mochajs.org/) (sẽ sớm có thêm thông tin chi tiết) để chạy thông số kỹ thuật đó. Trong khi hàm không hoàn thành, lỗi được hiển thị. Chúng ta thực hiện chỉnh sửa cho đến khi mọi thứ hoạt động. 4. Bây giờ chúng ta có một thực hiện ban đầu đang hoạt động với bài kiểm tra. 5. Chúng ta thêm nhiều trường hợp sử dụng hơn vào thông số kỹ thuật, có thể chưa được triển khai hỗ trợ. Các thử nghiệm bắt đầu thất bại. 6. Đến bước 3, cập nhật việc triển khai cho đến khi kiểm tra không có lỗi.