Tôi muốn đảm bảo rằng trong trường hợp mã đang chạy trong chế độ thử nghiệm, nó không (vô tình) truy cập cơ sở dữ liệu sai. Cách tốt nhất để phát hiện nếu mã hiện đang chạy trong chế độ thử nghiệm là gì?Làm cách nào để phát hiện xem thử nghiệm mocha có đang chạy trong node.js không?
Trả lời
Như đã đề cập trong nhận xét, thực tiễn không tốt là xây dựng mã của bạn nhận thức được các thử nghiệm. Tôi thậm chí không thể tìm thấy chủ đề được đề cập trên SO và thậm chí bên ngoài. Tuy nhiên, tôi có thể nghĩ ra cách để phát hiện sự kiện được đưa ra trong thử nghiệm. Đối với tôi, mocha không tự thêm vào phạm vi global
, nhưng thêm global.it
. Vì vậy, kiểm tra của bạn có thể
var isInTest = typeof global.it === 'function';
tôi sẽ đề nghị để chắc chắn bạn không giả phát hiện thêm séc global.sinon
và global.chai
mà bạn có thể sử dụng hầu hết trong các thử nghiệm Node.js của bạn.
Bây giờ là về xây dựng mã đang được nhận thức của các bài kiểm tra. Tôi muốn ném một lỗi nếu ai đó viết một bài kiểm tra chạy với các cài đặt triển khai. Ý tưởng là để bảo vệ một số chức năng "nguy hiểm" khỏi bị tình cờ gọi là mẫu thử nghiệm được định cấu hình sai (như thả bảng trên hệ thống sản xuất). –
Một hành vi lạm dụng khác ... Môi trường của nhà phát triển không phải giải quyết cấu hình sản xuất trừ khi thực hiện khắc phục sự cố. Cấu hình của nhà phát triển chỉ có thể đạt được môi trường địa phương hoặc ít nhất là giai đoạn, nhưng không thể sản xuất. Tuy nhiên, đó là tất cả các ý kiến và tư vấn, câu trả lời được cung cấp. Đừng quên để cho cộng đồng biết liệu nó có phù hợp với nhu cầu của bạn hay là sai –
Đó là những trường hợp 'khắc phục sự cố', các nhà phát triển có xu hướng quên rằng họ được kết nối với cơ sở dữ liệu thực và chạy thử nghiệm có khả năng phá hủy dữ liệu ... –
Kiểm tra process.argv
là một cách tiếp cận tốt trong kinh nghiệm của tôi.
Ví dụ nếu tôi console.log(process.argv)
trong một thử nghiệm tôi nhận được như sau:
[
'node',
'/usr/local/bin/gulp',
'test',
'--file',
'getSSAI.test.unit.js',
'--bail',
'--watch'
]
Từ đó bạn có thể thấy ngụm đang được sử dụng. Sử dụng yargs làm cho việc diễn dịch dễ dàng hơn rất nhiều.
Tôi mạnh mẽ đồng ý với Kirill và nói chung mã không nên biết thực tế là nó đang được kiểm tra (trong trường hợp của bạn có lẽ bạn có thể vượt qua ràng buộc/kết nối db của bạn thông qua một hàm tạo?), Tôi có thể thấy lý do tại sao bạn có thể muốn phát hiện điều này.
Lý do duy nhất tôi cần kiểm tra xem ứng dụng có đang chạy thử nghiệm hay không là kiểm tra xem tôi có được kết nối với cơ sở dữ liệu sản xuất hay không, bởi vì các thử nghiệm sẽ xóa cơ sở dữ liệu. Chỉ là hoang tưởng thuần khiết, bởi vì nó sẽ không bao giờ xảy ra - nhưng trong 30 năm trong kinh doanh này, tôi đã thấy rất nhiều điều sai trái đã được tuyên bố là "điều đó sẽ không bao giờ xảy ra". –
- 1. Làm cách nào để phát hiện xem thử nghiệm NUnit có đang chạy trong TeamCity không?
- 2. mocha đang chạy với thử nghiệm NPM nhưng không phải lệnh CLI mocha thông thường
- 3. không chạy thử nghiệm mocha với buồm
- 4. sử dụng thử nghiệm mocha với cloud9, thực hiện kiểm tra mocha từ node.js
- 5. Làm cách nào để có thể truy xuất tên thử nghiệm hiện tại trong thử nghiệm Mocha?
- 6. Mocha chỉ chạy một tệp thử nghiệm
- 7. Có cách nào đáng tin cậy để phát hiện xem io.js hoặc node.js có đang chạy không?
- 8. Làm cách nào để chạy thử nghiệm mocha chỉ sau khi thử nghiệm không đồng bộ trước đó đã qua?
- 9. Làm cách nào để phát hiện xem IDE Delphi cụ thể có đang chạy không?
- 10. Với mocha, làm cách nào để chạy tất cả các thử nghiệm * không * có (chậm) trong tên?
- 11. Node.js + Chai/Mocha/Nên: chạy nhiều thử nghiệm đối với cùng một phản hồi
- 12. Làm thế nào để bạn cài đặt và chạy Mocha, mô-đun thử nghiệm Node.js? Không tìm thấy "mocha: command not found" sau khi cài đặt
- 13. Làm cách nào để phát hiện xem IE8 có đang chạy trong chế độ xem tương thích không?
- 14. Mocha Mock Carries Để thử nghiệm khác
- 15. Mocha + RequireJS = Thử nghiệm AMD
- 16. Làm thế nào tôi có thể nhận được mocha để chạy thử nghiệm của tôi trong sự cô lập?
- 17. Chạy thử nghiệm Mocha với SailsJS và Superagent
- 18. Lấy tên thử nghiệm trong hàm afterEach trong mocha
- 19. Có cách nào để phát hiện hoạt ảnh đang chạy trong iOS không?
- 20. Làm cách nào để chạy thử nghiệm tích hợp?
- 21. Chạy thử nghiệm mocha nhưng gặp lỗi: Tham chiếuError: tài liệu không được xác định
- 22. Làm cách nào để phát hiện xem ứng dụng của tôi có đang chạy trên máy ảo không?
- 23. Cách phát hiện xem MemoryMappedFile có đang sử dụng không
- 24. Làm cách nào để tắt thông báo [không có tệp thử nghiệm] khi thử nghiệm
- 25. C#: Cách phát hiện xem trình đọc màn hình có đang chạy không?
- 26. Cách phát hiện xem tập lệnh có đang chạy trên máy ảo không?
- 27. Làm cách nào để chạy thử nghiệm cụ thể bằng cách sử dụng thử nghiệm dotnet?
- 28. Thử nghiệm Mocha ES6 được hỗ trợ?
- 29. Thử nghiệm Mocha không chạy xác nhận Chai bằng cách sử dụng Meteor
- 30. Làm cách nào để TeamCity chạy thử nghiệm bằng MSTest?
Cách tốt nhất để tránh điều đó là giả lập lớp dữ liệu thực sự –
Bạn đang chạy thử nghiệm ở đâu để có quyền truy cập vào tài nguyên sản xuất? Điều này cần được giải quyết ở cấp độ mạng. Cơ sở dữ liệu sản xuất chỉ nên chấp nhận các kết nối từ các máy sản xuất. –
... nó có thể không phải là môi trường sản xuất. Tôi muốn đảm bảo rằng các thử nghiệm chạy với môi trường thử nghiệm. Nếu không, tôi sẽ ném một lỗi. –