2015-01-15 17 views
6

Tôi muốn có thứ gì đó giống như binding.pry trong ruby, về cơ bản, tôi muốn có thể thêm một dòng vào mã của tôi và có một trình gỡ lỗi dừng ở đó, trong khi nghiệp chướng đang chạy góc của tôi/hoa nhài kiểm traCông cụ REPL cho góc/hoa nhài/nghiệp

it('runs my jasmine test', function() { 
    var a = true; 
    binding.pry // stops code and enters REPL prompt 
    expect(a).toBe(true); 
}); 

kết quả sau đó sẽ là một dấu nhắc

#

đâu tôi có thể làm mọi thứ để các biến có sẵn trong phạm vi đó, tại thời điểm đó trong thời gian

# a = false;

Sau đó, tôi có thể thoát và tiếp tục thực hiện.

# exit

Cũng giống như gỡ lỗi với các công cụ dev, nhưng tôi muốn có bên ngoài này của môi trường trình duyệt và bên trong nhà ga theo một quy trình nghiệp. Tôi cũng đã tìm thấy https://github.com/alidavut/locus, tuy nhiên nó dường như không hoạt động theo nghiệp.

Trả lời

3

Tôi không biết cách nào để khởi động một repl trong quá trình nghiệp, nhưng những gì bạn có thể làm chỉ đơn giản là viết:

debugger; 

tại điểm mà bạn muốn gỡ lỗi. Sau đó, nếu bạn có công cụ dev của trình duyệt đã mở khi dòng đó được thực hiện, quá trình thực thi sẽ tạm dừng và bạn sẽ có thể sử dụng "biểu thức xem" có thể đủ cho bạn. Bạn có quyền truy cập vào ngăn xếp cuộc gọi và tất cả các biến cục bộ. Bạn cũng có thể gán cho các biến cục bộ trong biểu thức đồng hồ và các giá trị mới sẽ vẫn tồn tại khi bạn tiếp tục thực hiện.

Tôi chỉ thử nghiệm tính năng này trên Chrome. Những gì tôi phải làm là:

  1. Đặt tuyên bố debugger; trong
  2. Bắt đầu nghiệp..
  3. Mở công cụ dành cho nhà phát triển Chrome.
  4. Lưu một trong các tệp nghiệp vụ đã xem (vì vậy bây giờ các kiểm tra sẽ chạy lại với các công cụ dev đã mở).
  5. Lợi nhuận!

Thực hiện REPL ở phía nghiệp sẽ cần nhiều nỗ lực hơn khi tất cả mã thử nghiệm được thực thi trên trình duyệt. Để kiểm soát một REPL từ quá trình nghiệp chướng, bạn sẽ cần phải thiết lập các sự kiện để giao tiếp thông qua các ổ cắm mà nghiệp tạo ra để nói chuyện với trình duyệt. Nên có thể làm được mặc dù nếu bạn đang nghiêng như vậy.EDIT: thực sự, để làm điều này bạn vẫn sẽ cần để có thể thực hiện khối Javascript tại một tuyên bố cụ thể, và tôi khá chắc chắn rằng debugger; là cách duy nhất để làm điều này.

+0

Trình gỡ lỗi đáng buồn không hoạt động trên dòng lệnh. Không hoạt động với PhantomJS. Không hoạt động dưới nodeJS/gulp/các dòng lệnh javascript khác. – Cosmin

+0

Bạn đã thử khởi chạy PhantomJS bằng '--remote-debugger' chưa? http://phantomjs.org/troubleshooting.html –