kiểm thử phần mềm

Tham gia
19/4/18
Bài viết
92
Được thích
2
1321 #1
Protractor là một công cụ kiểm thử phần mềm tự động hóa để kiểm thử các ứng dụng web; kết hợp các công nghệ mạnh mẽ như Jasmine, Selenium WebSearch, Node.js, v.v.

Công cụ kiểm thử Protractor là một khung kiểm thử dựa trên hành vi kết thúc để kết thúc được thiết kế để giữ cho các ứng dụng Angular JS. Mặc dù điều đó có vẻ như Protractor sẽ không hoạt động với các ứng dụng JS không góc cạnh, nhưng thực tế là vậy.

Nó hoạt động với cả ứng dụng JS góc và không góc đều tốt như nhau.

Hãy khám phá toàn bộ loạt bài hướng dẫn của AngularJS . Trong hướng dẫn trước của chúng tôi, sự khác biệt giữa các phiên bản góc được giải thích chi tiết.


kiểm thử phần mềm chuyên nghiệp tại NIIT - ICT Hà Nội

Thước đo góc với Selenium WebDriver

Điều gì làm cho Protractor khác với Selenium WebDriver truyền thống ?

Hãy dành một phút để trả lời những câu hỏi sau:

Đây có phải là một cuộc đấu tranh để xác định khi nào chính xác trang web cuối cùng đã được tải (Tất cả các yếu tố không đồng bộ đã sẵn sàng và được xử lý)?

Bạn có mệt mỏi khi thêm chờ đợi và ngủ vào mã của bạn?

Bạn có muốn thoát khỏi những nỗ lực rườm rà để xác định vị trí các yếu tố góc cạnh?

Thất vọng với các yếu tố định vị với Id thay đổi?

Bạn có muốn tạo định vị riêng của bạn?

Bạn đang viết mã dài ngay cả đối với các xác nhận đơn giản nhất?

Bạn có phải là người đam mê / người hâm mộ JavaScript không?

Nếu bạn trả lời Có cho những câu hỏi này, Protractor có thể giúp đỡ.

Đó là một trình bao bọc được xây dựng trên Selenium WebSearch và do đó, cung cấp tất cả các khả năng của Selenium cùng với nhiều bổ sung hữu ích. Nó cung cấp:

Tính năng, đặc điểm

Nó cung cấp:
1) WaitForAngular

Từ tài liệu:

“ Chỉ dẫn WebDriver đợi cho đến khi góc đã hoàn tất render và không có dư $ http hoặc $ cuộc gọi thời gian chờ trước khi tiếp tục. Lưu ý rằng Protractor tự động áp dụng lệnh này trước mỗi hành động WebDriver. Giáo dục

Điều này có nghĩa là không cần thêm thủ công chờ vào tập lệnh của bạn và Protractor sẽ tự động chờ các phần tử web tải và chỉ sau đó thực hiện các bước tiếp theo.

2) Nó có khả năng xuất một phần tử hàm toàn cục , cần một bộ định vị và sẽ trả về một Element Downloader. Element Downloader này có một tập hợp các phương thức hành động, chẳng hạn như click (), getText (), sendKeys (), v.v ... Đây là cốt lõi của cách tương tác với phần tử và lấy thông tin từ nó.

Hàm toàn cục này giúp giảm cú pháp định vị phần tử. Hãy xem tuyên bố sau để xác định vị trí phần tử trong cả Selenium WebDriver và Protractor:

Weben Selenium :
1

driver.findElement(By.cssSelector("css selector"));

Thước đo góc :

1

element(by.css('some-css'));

Cú pháp có vẻ nhỏ gọn phải không?

3) Một số chiến lược và chức năng định vị mới được cung cấp để giúp định vị các yếu tố Angular là: By.binding, By.repeater, By.textarea, By.model, WebEuity.all, WebEuity.evalu , v.v.

Protractor có thể giúp tôi như thế nào?

Hãy xem các tính năng nổi bật sau đây:
Cú pháp đơn giản để viết test

Khả năng chạy nhiều trình duyệt cùng một lúc bằng Selenium Grid

Định vị góc cụ thể

Hỗ trợ phát triển theo định hướng hành vi như Jasmine / Mocha

Không cần thêm ngủ / chờ

Hỗ trợ tích hợp với Jenkins / Trình duyệt Stack / Grunt, v.v.

Loại bỏ việc xử lý vấn đề đồng bộ hóa trong các trang web Angular JS

Hỗ trợ nhiều trình duyệt (Firefox, Chrome, Safari, Internet explorer)

Khả năng chạy các tập lệnh tương tự trong trình duyệt di động mà không cần phải thay đổi mã

Sử dụng khung nào?
Nó hỗ trợ hai khung kiểm thử phần mềm phát triển dựa trên hành vi (BDD) ngay lập tức:

Jasmine: Jasmine là khung thử nghiệm mặc định khi Protractor được cài đặt. Chúng tôi sẽ sử dụng Jasmine trong bài viết này.

Mocha: Mocha là một khung kiểm thử JavaScript chạy trên Node.js. Nếu bạn muốn sử dụng Mocha làm khung thử nghiệm, bạn sẽ phải thiết lập nó với Thước đo góc của mình và cũng sẽ cần sử dụng giao diện Phát triển hướng hành vi và Xác nhận Chai với Chai như đã hứa (tham khảo liên kết này để biết thêm chi tiết ).

Cách tải xuống và thiết lập thước đo góc

Vì nó là một chương trình node.js, bạn cần cài đặt node.js để nó chạy. Có thể tải xuống Node.js từ URL này bằng cách chọn hệ điều hành: Tải xuống Node.js

Với node.js, bạn cũng có được gói Protractor npm , giờ đây có thể được sử dụng để cài đặt Protractor.

Bây giờ, node.js đã được cài đặt vào máy của bạn, hãy mở dấu nhắc lệnh (cmd) và nhấn lệnh bên dưới để cài đặt nó trên toàn cầu:

1

npm install -g protractor

'-g' được sử dụng để cài đặt công cụ này trên toàn cầu. Xóa nó nếu bạn không muốn cài đặt nó trên toàn cầu. Lệnh này cũng cài đặt API Protractor cùng với máy chủ selen mặc định, điều đó có nghĩa là bạn không nhất thiết phải khởi động một máy chủ độc lập.

Bây giờ, chúng ta cần cài đặt máy chủ selen và ChromeDriver. Sử dụng lệnh sau (cũng đi kèm với Protractor) trong cmd:

1

webdriver-manager update

Đây là tất cả những gì chúng ta cần để bắt đầu với việc viết trường hợp thử nghiệm đầu tiên bằng cách sử dụng khung này. Nếu bạn muốn, bạn có thể cài đặt bất kỳ IDE / trình soạn thảo nào để viết mã của bạn.

IDE Eclipse là một phổ biến, nhưng cũng có một số trình soạn thảo thú vị hơn để xem xét. Cá nhân, tôi thích trình soạn thảo 'Atom' hơn cho cách viết mã Protractor của mình.

Sẵn sàng để tạo trường hợp thử nghiệm đầu tiên của bạn?

Nó cần 2 tệp để chạy:
Tập tin cấu hình

Tập tin Spec.

Tệp cấu hình là tệp cho Protractor biết nơi tìm các tệp thử nghiệm (thông số kỹ thuật) / nên chọn trình duyệt nào / sử dụng khung nào (Jasmine / Mocha) / nơi để nói chuyện với trình duyệt Selenium của bạn và các cấu hình khác. Nếu bất kỳ cấu hình nào không được xác định trong các tệp cấu hình, nó sẽ sử dụng mặc định.

Spec file là nơi chúng tôi viết mã kiểm thử phần mềm thực tế của chúng tôi. Tất cả các luồng / xác nhận chức năng thử nghiệm của chúng tôi sẽ có trong tệp cụ thể này. Có thể có một số tệp spec dựa trên số lượng trường hợp thử nghiệm nhưng chỉ cần 1 tệp spec sẽ có thể chạy toàn bộ bộ thử nghiệm của một số thông số kỹ thuật.

Bây giờ, chúng tôi sẽ viết một trường hợp thử nghiệm đơn giản trong đó chúng tôi sẽ điều hướng đến một URL và kiểm thử tiêu đề trang.

Dưới đây là các bước:
Tạo một thư mục mới cho bộ thử nghiệm của bạn.

Tạo một tệp mới có tên là ' js '. (Bất kỳ tên nào cũng được) Tất cả các tệp cấu hình / cấu hình sẽ thuộc phần mở rộng '.js'.

Tạo một tệp mới với tên được chỉ định là ' js '.

Tất cả các lệnh cấp trình duyệt sẽ được xử lý bởi ' trình duyệt ', toàn cầu được tạo bởi Protractor.

Khi chúng tôi kiểm thử phần mềm đang theo khuôn khổ Jasmine, ' mô tả' và ' nó ' là cú pháp của Jasmine.

Mô tả sẽ chứa toàn bộ kết thúc để kết thúc luồng của trường hợp thử nghiệm của bạn, trong khi 'nó' có thể chứa một số bước / kịch bản thử nghiệm, v.v. Bạn có thể có nhiều khối ' nó ' trong chương trình của mình nếu muốn.

browser.get là một cú pháp Selenium đơn giản cho Protractor nhấn một URL cụ thể trong trình duyệt.

Khi trang web của chúng tôi đang cố gắng để đạt được một trang web không góc cạnh, chúng tôi đặt ignoreSynchronization thẻ để ' đúng ' như được hiển thị tại dòng

# 4. Nếu bạn không thực hiện thẻ này đúng, thử nghiệm của bạn sẽ thất bại với lỗi “không thể kiễu góc được tìm thấy trên trang. Lý do đằng sau điều này là Protractor dự kiến sẽ làm việc với các trang web góc cạnh và nếu chúng ta đang sử dụng Protractor để xác nhận trang web không góc cạnh, chúng ta cần nói rõ điều này với Protractor.

Tuy nhiên, nếu bạn đang làm việc trên các trang web góc cạnh, không cần phải sử dụng câu lệnh này vì Protractor theo mặc định sẽ coi trang web là góc cạnh.

'mong đợi' không là gì ngoài khẳng định chúng tôi đang so sánh tiêu đề trang web với một số dữ liệu được xác định trước. Chúng tôi sẽ thảo luận chi tiết hơn về các xác nhận.

# 2) conf.js

Như đã thảo luận trước đó, tệp cấu hình là tệp thông báo cho Protractor các chi tiết cốt lõi. Như được hiển thị trong mã, khung là 'Jasmine'.

Trong phần khả năng, cấu hình trình duyệt được đặt. Bạn có thể xác định tên trình duyệt như Firefox / chrome, v.v. Bạn cũng có thể đặt phiên bản tối đa của trình duyệt để cùng một lúc, bạn có thể chạy nhiều trường hợp thử nghiệm trên các cửa sổ trình duyệt có sẵn khác nhau.

Trong phần ' thông số kỹ thuật ', chúng tôi đưa ra đường dẫn của tệp spec, tức là chính xác vị trí của tệp spec với tệp cấu hình.

Ngoài ra còn có nhiều tính năng thú vị khác mà bạn có thể đính kèm vào tệp cấu hình của mình, chẳng hạn như chức năng báo cáo / onPrepare / hết thời gian chờ, v.v. Chúng tôi sẽ đề cập đến một vài trong số này trong hướng dẫn này.

Làm thế nào để chạy trường hợp thử nghiệm của bạn?

Chúng tôi đã viết mã và bây giờ tất cả những gì chúng tôi cần là một cú hích nhỏ để mã của chúng tôi chạy. Nhấn lệnh sau trong cmd để chạy chương trình của bạn:

1

protractor conf.js

Lệnh này sẽ bắt đầu chạy máy chủ selenium, sau đó chạy tập lệnh thử nghiệm của bạn. Bạn có thể xem nhật ký bằng cmd hoặc nếu bạn muốn, nhật ký cũng có thể được ghi lại trong tệp .txt (chỉ cần thêm >> textFileName.txt sau lệnh trên và nhật ký sẽ được lưu trong tệp văn bản nằm trong cùng một tệp thư mục như tập tin cấu hình).

Một cửa sổ chrome sẽ mở ra, nơi trang web SoftwareTestingHelp.com sẽ được mở. Đầu ra sẽ là '1 spec, 0 fail' khi bạn chạy mã. Điều này có nghĩa là chúng tôi đã có các khối 1 'nó', được thực hiện với 0 lần thất bại.

Bây giờ, hãy xem xét tệp spec bên dưới nơi chúng tôi đang thực hiện một số hành động trên một trang web được xây dựng trên AngularJS để bạn có thể thấy thước đo của Selenium khi thử nghiệm trang web Angular:

Bạn cũng có thể sử dụng cùng một conf.js để chạy thông số này. Chỉ cần đảm bảo cập nhật tên tệp đặc tả.

Bây giờ, trong tệp đặc tả này, chúng tôi đang chơi với một trang web JS góc cạnh để bạn có thể thấy chính xác Protractor có khả năng gì.

Nếu kiểm thử phần mềm chạy tệp này giống như chúng tôi đã làm trước đó, một trang web sẽ mở ra với 2 hộp văn bản, trình đơn thả xuống, nút và một số yếu tố web khác. Như bạn có thể đã đoán, đó là một trang máy tính. Chúng tôi đang đưa ra 2 số nguyên làm đầu vào và thực hiện thao tác nhân.

Như chúng ta đã thảo luận, một trong những lợi thế lớn nhất của việc sử dụng công cụ này là các kỹ thuật độc đáo của nó để xác định vị trí các yếu tố Angular. 'by.model' là một cách như vậy để định vị các phần tử. '.sendKeys ()' là cú pháp Selenium thông thường để gửi các giá trị trong hộp văn bản và '.click ()' được sử dụng để nhấp vào nút.

Như đã thảo luận trước đó, 'mong đợi' là một khẳng định, yêu cầu Protractor nắm bắt kết quả của phép nhân số và so sánh nó với '10' và '25' theo tuần tự. Toán học đơn giản cho chúng ta biết rằng đầu ra phải là '25' và do đó, khẳng định đầu tiên thất bại và lần thứ hai trôi qua.

Kết quả là, bạn sẽ nhận được ' 1 Spec, 1 Failure ' trong nhật ký khi bạn chạy mã, điều này được mong đợi.

Một số tính năng thú vị khác của Protractor
# 1) Khẳng định & chú thích

Các xác nhận là một phần quan trọng của các kịch bản tự động hóa. Các chú thích cũng rất hữu ích trong việc gắn thẻ hiệu quả các phương thức nhất định trong một lớp để có ý nghĩa đặc biệt.

Nó cung cấp một loạt các xác nhận và chú thích và ngoài ra, cũng cung cấp khả năng tạo các xác nhận của riêng bạn.

Hãy xem xét ví dụ dưới đây:

Trong ví dụ trên, chúng tôi đang sử dụng 2 chú thích, 'beforeEach' và 'afterEach' . Những chú thích này cũng có sẵn trong TestNG (Selenium truyền thống). Các chú thích này đảm bảo rằng một đoạn mã cụ thể sẽ được thực thi trước / sau tương ứng việc thực thi mã còn lại.

Vì vậy, đây là cách thực thi mã sẽ diễn ra

Thước đo góc sẽ tiếp cận bên trong khối ' beforeEach ' trước và nó sẽ nhấn URL ' trong trình duyệt.

Bây giờ, kiểm thử phần mềm luồng sẽ di chuyển đến khối 'it' và hàm ' bội số' sẽ được gọi, lần lượt sẽ thực hiện các hành động được chỉ định trong nó để gửi điều khiển trở lại nơi hàm được gọi.

Cuối cùng, khẳng định sẽ làm công việc của nó. Bây giờ, nếu chúng tôi muốn giải quyết nhiều yếu tố cùng một lúc, bạn có thể sử dụng 'Element.all' một tính năng của công cụ này. Nó sẽ xác định tất cả các thành phần khả dụng với trình định vị được chỉ định (by.repeater trong trường hợp này).

Tùy thuộc vào bạn những gì bạn muốn làm với các yếu tố được xác định. Trong trường hợp này, chúng tôi đang so sánh lịch sử tính toán với một số đã cho.

Vì trong xác nhận đầu tiên, chúng tôi đang so sánh số lượng lịch sử tính toán với '2' mặc dù chúng tôi đã thực hiện tính toán chỉ một lần, xác nhận sẽ thất bại. Tuy nhiên, xác nhận thứ hai sẽ vượt qua như sau phép tính thứ hai, số lượng lịch sử sẽ là '2'.

Có nhiều loại xác nhận có sẵn hơn. Một số trong số đó được đưa ra dưới đây:

a) Nhận văn bản từ một thành phần web và so sánh nó với một giá trị nhất định:

# 2) Xử lý nhiều trình duyệt / cửa sổ / tab

Có thể có nhiều trường hợp khi xử lý trình duyệt. Một số trường hợp được đánh dấu dưới đây:

a) Một tab mới mở ra bằng cách nhấp vào bất kỳ liên kết nào

Đôi khi, khi bạn nhấp vào bất kỳ liên kết nào, một tab mới sẽ mở ra và phần còn lại của các hành động cần phải diễn ra trong cửa sổ mới mở. Trong trường hợp này, khi bạn viết mã đến điểm một tab mới được mở, bạn cần triển khai Window Handler bằng cách sau:

Trước tiên, hãy đếm số lượng tất cả các cửa sổ có sẵn và sau đó sử dụng lập chỉ mục để chuyển điều khiển giữa các cửa sổ. Cửa sổ ban đầu khởi tạo cửa sổ mới sẽ có chỉ số 0, trong khi các cửa sổ tiếp theo sẽ có các chỉ mục tăng dần.

b) Mở trình duyệt hoàn toàn mới với phiên mới

Khi bạn cần thực hiện một số hành động trên trình duyệt và cần thực hiện thêm các hành động khác trên một phiên khác của trình duyệt, chúng tôi cần sử dụng forkNewDriverInstance . Trong trường hợp này, chúng tôi tạo một phiên bản trình duyệt mới với tên trình duyệt mới theo cách sau:

c) Chạy trường hợp thử nghiệm của bạn trong nhiều trình duyệt:

Chạy trường hợp thử nghiệm của bạn trong 2 trình duyệt cùng một lúc là một tập tin cấu hình có thể làm cho kiểm thử phần mềm. Chỉ cần thêm mã dưới đây vào tập tin cấu hình của bạn:

Ngay khi bạn chạy tệp cấu hình này, bạn sẽ thấy các thử nghiệm chạy trong cả Firefox và Chrome và nhật ký chạy sẽ được hiển thị trong dấu nhắc lệnh riêng.

# 3) Sử dụng Đối tượng Trang để làm cho khung của bạn thậm chí tốt hơn

Công cụ này tự nó tốt nhưng nó trở nên bất khả chiến bại khi được kết hợp với Mô hình đối tượng trang (POM). Hầu hết các thiếu sót của nó (nếu có) được khắc phục với mô hình đối tượng trang. Hơn nữa, POM cũng giúp duy trì dự án của bạn theo cách có cấu trúc hơn.

Nếu bạn không biết POM là gì, đừng lo lắng. POM là một cách để tách riêng trường hợp thử nghiệm của bạn trên cơ sở các trang.

Lấy ví dụ này:
Có một trang web mua sắm. Trường hợp thử nghiệm của bạn là chọn một sản phẩm, thêm nó vào giỏ hàng và sau đó mua nó.

Bây giờ, có hai cách để quản lý mã tập lệnh thử nghiệm của bạn cho việc này:

Viết một trường hợp thử nghiệm đơn giản với tất cả các bộ định vị trên cùng một trang logic của bạn được viết,

Viết tất cả dòng chảy của trường hợp thử nghiệm, logic của bạn vào tệp spec của bạn và tách riêng các trình định vị và dữ liệu thử nghiệm của bạn trong các tệp khác nhau.

Mỗi trang web sẽ có một tệp trang .js tương đương. Theo cách này, mã của bạn sẽ được cấu trúc và nếu có bất kỳ trường hợp kiểm thử phần mềm nào khác yêu cầu cùng một trình định vị, bạn không cần phải viết lại các trình định vị này, chỉ cần nhập tệp định vị này và sử dụng theo nhu cầu của bạn.

Duy trì các trường hợp thử nghiệm của bạn có thể là một nỗi đau thực sự. Nếu bạn sử dụng POM, mã của bạn sẽ theo cách có cấu trúc hơn nhiều.

Dưới đây là một ví dụ về việc sử dụng mô hình đối tượng trang:

Đây là luồng trong ảnh chụp nhanh ở trên:
Có một trường hợp thử nghiệm mua máy tính xách tay. Mã cho luồng và logic sẽ có trong buyL mỏiSpec.js.

Tất cả các trang gặp phải để mua Máy tính xách tay sẽ có tệp 1 '.js' với tiêu đề phù hợp. Tất cả các yếu tố cần thiết để được sử dụng để mua Máy tính xách tay, bộ định vị của chúng sẽ nằm trong tệp trang tương ứng.

Dữ liệu cần thiết cho trường hợp thử nghiệm này có thể được lưu trong thư mục TestData ở định dạng '.json' hoặc ở định dạng excel.

Sau khi thực hiện với các trang và trình định vị, chỉ cần nhập các tệp này trong tệp spec của bạn để sử dụng dữ liệu định vị / kiểm thử và bạn đã hoàn tất cài đặt với trường hợp kiểm thử phần mềm của mình.

# 4) Báo cáo

NPM (Trình quản lý gói Node) cung cấp các gói báo cáo khác nhau, trong đó ảnh chụp màn hình của từng bước kiểm thử có thể được chụp và đồng thời, khi quá trình chạy thử hoàn thành, nó sẽ tạo một báo cáo HTML cho bạn. Tất cả bạn phải làm là cài đặt các gói đó bằng cách mở một dấu nhắc lệnh và nhấn các lệnh dưới đây:

Khi các gói này được cài đặt, mỗi khi bạn chạy tệp cấu hình của mình, tất cả các ảnh chụp màn hình của các trường hợp thử nghiệm của bạn sẽ được lưu và cũng sẽ có một báo cáo HTML được tạo hiển thị kết quả vượt qua / thất bại của trường hợp kiểm thử phần mềm.

# 5) Tích hợp với các công cụ mạnh mẽ khác như Git / Jenkins / Browserstack / Grunt

Có nhiều công cụ có sẵn trên thị trường để giúp làm cho các trường hợp thử nghiệm của bạn trở nên tốt hơn. Git / Jenkins / BrowserStack / Grunt là một số công cụ như vậy làm tăng giá trị quan trọng cho các tập lệnh kiểm thử Protractor bình thường của bạn.

Và phần tốt nhất là bạn không phải chạm vào tệp spec của mình để tích hợp Thước đo góc với bất kỳ công cụ nào trong số này. Đây là tập tin cấu hình của bạn, sẽ lấy tất cả những thứ này cho bạn.

Git là một công cụ kiểm soát phiên bản rất mạnh mẽ. Luôn luôn là một cách tốt nhất để giữ mã của bạn trong Git nếu có nhiều nhà phát triển tham gia.

Jenkins là một công cụ tích hợp liên tục, trong đó, bạn có thể lên lịch cho các trường hợp thử nghiệm của mình và chạy nó theo nhu cầu của bạn. Kịch bản thước đo góc cũng có thể được cấu hình với Jenkins. Sử dụng tốt nhất để chạy các trường hợp thử nghiệm của bạn trên Jenkins là nó rất nhanh và bạn cũng có thể chạy nhiều trường hợp thử nghiệm cùng một lúc.

BrowserStack là một công cụ kiểm thử phần mềm trình duyệt chéo cũng có thể được sử dụng để kiểm thử các ứng dụng của bạn trên các trình duyệt khác nhau. Nó cũng có thể được tích hợp với Protractor bằng cách thêm thông tin đăng nhập browserStack vào tệp cấu hình của bạn.

Grunt là một người chạy tác vụ JavaScript. Nó cung cấp cho bạn khả năng thực hiện một số nhiệm vụ cho bạn. Điều tuyệt vời của nó là có hơn 4000 nhiệm vụ và bạn có thể tạo ra nhiều nhiệm vụ hơn nữa theo yêu cầu của bạn. Sau đây là một vài trong số các tác vụ sử dụng hàng ngày quan trọng mà chúng ta có thể sử dụng Grunt cho:

Liệt kê tất cả các thực tiễn tốt nhất về mã hóa và thông báo ngay lập tức bất cứ khi nào bạn vi phạm bất kỳ điều nào trong số này.

Để tạo nhiều tệp spec trong thời gian chạy. Ví dụ: nếu có bất kỳ trường hợp thử nghiệm nào bạn muốn chạy nhiều lần (từ 1 đến bất kỳ số nào). Điều này có vẻ không cần thiết vào thời điểm này nhưng hãy nghĩ đến việc chạy bất kỳ luồng thanh toán trang web mua sắm nào để được chạy trên mỗi quốc gia có sẵn. Sẽ thật tẻ nhạt khi tạo nhiều thông số kỹ thuật bằng tay. Vì vậy, hãy để Grunt làm điều này cho bạn.

Các tính năng đồng hồ. Bạn viết một trường hợp thử nghiệm và mỗi khi lưu mã của bạn sau khi thực hiện bất kỳ thay đổi nào trong đó, bạn muốn trường hợp thử nghiệm của mình chạy, Grunt đã nhận được nó.
 
Top Bottom