2012-06-16 37 views
8

Câu hỏi ngắn và có vẻ ngu ngốc vì đơn giản và bạn nghĩ mọi nơi: có ai nhận được bất kỳ loại mã bảo hiểm nào để làm việc trong dự án đầu cuối RequireJS (non NodeJS) không?Bảo hiểm mã JavaScript trong các mô-đun RequireJS/AMD

Có vẻ như một câu hỏi ngu ngốc vì sự phổ biến của các phương pháp TDD trong thế giới JS và sự tiếp quản phát triển AMD.

Tôi đã thử một triệu phương pháp tiếp cận, tất cả đều thiếu. Dự án của tôi là dự án Backbone với Thử nghiệm Đơn vị Jasmine:

1) JSTD có plugin Bảo hiểm. JSTD gặp sự cố khi tải và lắp đặt các mô-đun AMD. Nếu tôi chạy JSTD trên một tệp js duy nhất (được kết hợp bởi trình tối ưu hóa RequireJS) thì phạm vi mã hoạt động rất đẹp, XÁC NHẬN rằng phạm vi được thu thập và các số liệu được xác định trên tệp ENTIRE. Tuyệt vời, điều đó vô ích vì nó bao gồm thư viện của bên thứ 3 và bởi vì tôi không thể nhắm mục tiêu một đơn vị duy nhất để giúp kiểm tra sự phát triển. Argh.

2) Số dư trung bình - tổng số không thành công, không giống như mô-đun AMD.

3) Chrome cụ thể & Firebug cụ thể 'sống' nhạc cụ - thất bại, không thích mô-đun AMD.

Mọi cách tiếp cận tôi cố gắng dường như yêu cầu số lượng lớn công việc tùy chỉnh. Vì vậy, có lẽ tôi cần phải quay một giải pháp tùy chỉnh từ đầu?

Cách tiếp cận sau: mở rộng trình tối ưu hóa RequireJS thành mã công cụ và tạo mức độ phù hợp. Nó sẽ là bộ nhớ trong bộ nhớ có thể được kích hoạt với cờ require.config ({instrument: true}). Mỗi lần yêu cầu tải một mô-đun, nó sẽ tự động đặt nó và đặt nó vào kho lưu trữ mô đun của nó. Số liệu thống kê bảo hiểm được thu thập trong một đối tượng bên dưới đối tượng yêu cầu toàn cục và có thể truy cập từ bất kỳ đâu, giả sử sau khi chạy thử nghiệm Jasmine.

Nhập liệu?

+0

phạm vi mã không nhỏ để triển khai. Bạn sẽ phải làm AST hackery với một cái gì đó giống như bunker. – Raynos

+0

Đồng ý. Đó là lý do tại sao tôi bắt đầu bằng cách sử dụng các thư viện AST & Instrumentation hiện có (Esprima, Node-Cover). Tôi có hầu hết các sửa đổi mã RequireJS được thực hiện và đang làm việc trên bộ phận thiết bị đo lường và bảo hiểm. – Bernardo

Trả lời

6

Blanket.js làm việc với QUnit sử dụng bộ nạp RequireJS đã sửa đổi. Chúng tôi đang hỗ trợ Jasmine và sẽ rất sẵn lòng chấp nhận bất kỳ phản hồi hoặc đề xuất nào.

Nếu dự án của bạn đang đi vào sản xuất, Blanket.js không dành cho bạn, nhưng nếu nó chỉ là một dự án phụ, nó có thể đáng xem nếu nó đáp ứng nhu cầu của bạn.

EDIT: Chăn hiện hỗ trợ Jasmine.

+0

Tài liệu về hỗ trợ hoa nhài của Blanket với requireJS ở đâu? Tôi thấy tài liệu Qunit về điều này nhưng không phải là hoa nhài. – rball

3

Vâng, hóa ra là Node-Coverage thực sự cung cấp giao diện độc lập của AMD hoạt động tốt với RequireJS và Jasmine, bằng cách phục vụ mã được thiết kế từ máy chủ của riêng nó.

Tôi vẫn sẽ dành một chút thời gian làm việc để triển khai bảo hiểm RequireJS mà tôi đã bắt đầu, vì nó sẽ không yêu cầu chạy một máy chủ riêng biệt.

2

Chính xác vấn đề của bạn với các mô-đun AMD và CPoverage là gì? Tôi có một thiết lập (QUnit/PhantomJS/JSCoverage) chạy với các mô-đun AMD.

Có thể bạn vừa quên thiết lập đường dẫn thư viện của mình đúng trong require.config?

Sau khi tôi thay đổi đường dẫn thư viện để sử dụng mã được thiết kế, thay vì tệp "bình thường", mọi thứ đã hoạt động.

2

mochawrapper

tôi chỉ viết một module nút đó tự động báo cáo bảo hiểm. Nó dựa trên mocha, jscoverage và xác nhận của nút. Bạn không phải sửa đổi yêu cầu hoặc sử dụng các biến thực hiện hoặc enviornment.

Nó được lưu trữ trên github: mochawrapper

jscoverage có lẽ không chạy trong trình duyệt, vì vậy bạn có thể muốn xem xét: bunker mà là dựa trên làm xấu đi-js

Các vấn đề liên quan