2014-08-31 25 views
11

Trong thư mục thử nghiệm của tôi, tôi có một tập tin mocha.opts chứa sau:Mocha có bỏ qua tùy chọn --harmony trong mocha.opts không?

--harmony 
--recursive 
--growl 
--reporter spec 
--require should 

Khi tôi chạy mocha, tôi nhận được lỗi sau:

/project/server/utilities/encryption.js:3 
const 
^^^^^ 
SyntaxError: Use of const in strict mode. 

Đây là, tất nhiên, bởi vì sử dụng của tôi của const yêu cầu ES6 Harmony. Khi tôi chạy mocha --harmony, các thử nghiệm của tôi chỉ hoạt động tốt. Và các mục khác trong tệp mocha.opts của tôi hoạt động như mong đợi.

Tệp mocha.opts có bỏ qua đối số --harmony vì một lý do nào đó không? Hay tôi làm sai? Các tài liệu Mocha không phức tạp và tôi đã không thể tìm thấy câu trả lời ở đây hoặc bất cứ nơi nào khác.

Trả lời

18

Người hỏi đã hỏi:

When I run mocha --harmony , my tests execute just fine. [...]

Does the mocha.opts file ignore the --harmony argument for some reason?

Vâng, mocha.opts bỏ qua đối số --harmony. Tùy chọn --harmony không phải là tùy chọn Mocha mà là tùy chọn Node.js. Đây là một tùy chọn phải được chuyển đến Node.js trước khi nó bắt đầu thực thi. Tuy nhiên, mocha.opts được đọc sau khi Node.js đã bắt đầu và vì vậy ngay cả khi Mocha có thể hiểu được tùy chọn, nó sẽ không thể làm bất cứ điều gì về nó.

Nhưng tại sao nó hoạt động trên dòng lệnh? Không phải là trường hợp khi tôi chạy mocha --harmony, Mocha phải bắt đầu trước khi phân tích cú pháp tùy chọn --harmony? Không, bởi vì mocha là tập lệnh bắt đầu Mocha "thực". Kịch bản shell phát hiện --harmony và đảm bảo nó được truyền tới Node.js khi nó bắt đầu Mocha "thực".

+0

Giải thích rõ ràng, cảm ơn bạn. – user3112401

+1

Nitpick - mocha là tập lệnh js gọi là Mocha thực. Nó không phải là một kịch bản shell. – manojlds

+1

mocha có thể sử dụng 'execv()' để thay thế chính nó bằng "nút thích hợp". Mọi người làm điều đó mọi lúc. – toriningen

0

Nó không hỗ trợ như một cái gì đó bạn có thể bao gồm trong mocha.opts. Bạn thêm nhiều vào dòng lệnh khi bạn gọi mocha. Xem this.

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