Việc UnitTest trong project Ionic2 sử dung karma và framework jasmine để thực hiện. Chúng ta sẽ tìm hiểu 1 số khái niệm cũng nhưng từng bước xây dựng môi trường UnitTest.
I. Các khái niệm
Karma
Là công cụ thực thi đoạn mã kiểm chứng (test code) Có thể hiểu như là môi trường mà các test code sẽ chạy trện đó. Đưa ra kết quả, thống kê các chỉ số sau khi thực thi test code.
Jasmine
Là một framework viết test code javascript theo mô hình BDD (Behavior-Driven Development)
Gulp
Là công cụ hỗ trợ tự động hóa các task trong quá trình phát triển như: build code, run code, copy files,... Chúng ta sẽ sử dụng gulp để sắp xếp các luồng kiểm chứng.
Browserify
Là công cụ dựa trên nền tảng nodejs, hướng đến giải quyết vấn đề resolve dependencies trong nodejs (thường sử dụng require()
để gọi đến các thư viện). Có thể hiểu là Browserify sẽ tìm các lệnh require()
trong code và tự động tìm các module này, sau đó đóng gói cùng với mã nguồn để đảm bảo mã nguồn luôn có thể chạy được.
CommonJs module
Là các module thỏa mãn các điều kiện sau:
-
Khi tạo ra module thì dùng module.exports hoặc exports
-
CommonJS module, sử dụng hàm require
Tslint
Linting tool có thể giúp developer tối ưu hóa code và viết code chất lượng cao. Linting là một quy trình kiểm tra code tìm lỗi trong code nguồn, và đánh dấu các bug tiềm năng. Có thể hiểu đơn giản thì tslint như một bộ coding convetion. linting (linter) sử dụng kỹ thuật phân tích code tĩnh. Nói cách khác, code được kiểm tra mà không cần phải chạy.
II. Cấu hình môi trường Unit Test
Cài đặt dependency và typings
`* browserify
- browserify-istanbul
- codecov.io
- gulp-tslint
- gulp-typescript
- isparta
- jasmine-core
- jasmine-spec-reporter
- karma
- karma-browserify
- karma-chrome-launcher
- karma-coverage
- karma-jasmine
- karma-mocha-reporter
- karma-phantomjs-launcher
- phantomjs-prebuilt
- protractor
- tsify
- ts-node
- tslint
- tslint-eslint-rules
- typescript
- typings`
Chi tiết nội dung của dependency thì các bạn tự tìm hiểu thêm nhé. Trong nội dung lần này tôi chỉ hướng dẫn cách cấu hình thôi. Bạn có thể cài đặt thông qua từng dòng lệnh
npm install -g typings npm install --save-dev browserify-istanbul codecov.io gulp-tslint gulp-typescript isparta jasmine-core karma karma-browserify karma-chrome-launcher karma-coverage karma-jasmine karma-mocha-reporter karma-phantomjs-launcher phantomjs-prebuilt traceur tsify ts-node tslint typings install --save --global registry:dt/jasmine registry:dt/node
Hoặc hãy cấu hình vào package.json
. Và sử dụng npm để install lại. Chẳng hạn như thế này.
"devDependencies": { "browserify": "13.0.1", "browserify-istanbul": "2.0.0", "codecov.io": "0.1.6", "del": "2.2.1", "gulp": "3.9.1", "gulp-tslint": "5.0.0", "gulp-typescript": "2.13.6", "gulp-watch": "4.3.8", "ionic-gulp-browserify-typescript": "2.0.0", "ionic-gulp-fonts-copy": "1.0.0", "ionic-gulp-html-copy": "1.0.0", "ionic-gulp-sass-build": "1.0.0", "ionic-gulp-scripts-copy": "2.0.1", "isparta": "4.0.0", "jasmine-core": "2.4.1", "jasmine-spec-reporter": "2.5.0", "karma": "1.1.0", "karma-browserify": "5.0.5", "karma-chrome-launcher": "1.0.1", "karma-coverage": "1.0.0", "karma-jasmine": "1.0.2", "karma-mocha-reporter": "2.0.4", "karma-phantomjs-launcher": "1.0.1", "phantomjs-prebuilt": "2.1.7", "protractor": "3.3.0", "run-sequence": "1.2.1", "ts-node": "0.9.3", "tsify": "0.16.0", "tslint": "3.12.1", "tslint-eslint-rules": "1.3.0", "typings": "1.3.1" },
$ npm install
Cấu hình gulp
Đặt file cấu hình./test/gulpfile.ts
. Cấp độ bằng với cấp độ root của dự án. Đây là một phần của trong quy đinh của Angular 2 Style Guide . Tuy nhiên bạn có thể để ở bất kỳ thư mục nào mà bạn muốn. Nhưng hãy nhớ rằng, khi bạn sử dụng lệnh gulp thì hãy cấu hình để trỏ đến file này.
gulp --gulpfile test/gulpfile.ts --cwd ./ unit-test
Sửa Karma’s static
Để có thể output ra việc chạy test thông qua html hãy copy tạo thêm thư 2 file context.html và debug.html vào node_modules/karma/static. Nếu không thiết lập 2 file này thì không thể chạy được PhantomJS.
context.html