Tôi có một mô hình lấy dữ liệu từ một đối tượng phân tích cú pháp. Tôi nghĩ rằng các phân tích cú pháp lớp nên sống trong thư mục lib/(mặc dù tôi có thể được thuyết phục rằng nó nên sống ở đâu khác). Câu hỏi đặt ra là: Các bài kiểm tra đơn vị của tôi nên cho lớp phân tích cú pháp ở đâu? Và làm thế nào để đảm bảo rằng chúng được chạy mỗi khi tôi chạy thử nghiệm cào?Đường ray: Cách kiểm tra mã trong thư mục lib /?
Trả lời
Trong ứng dụng Rails tôi đang làm việc, tôi quyết định chỉ cần đặt các bài kiểm tra trong thư mục test\unit
. Tôi cũng sẽ lồng ghép chúng theo mô-đun/thư mục, ví dụ:
lib/a.rb => test/unit/a_test.rb
lib/b/c.rb => test/unit/b/c_test.rb
Đối với tôi, đây là con đường kháng cuối cùng, khi các thử nghiệm này chạy mà không phải thực hiện bất kỳ thay đổi nào khác.
Dưới đây là một cách:
Tạo lib/tasks/test_lib_dir.rake
như sau
namespace :test do
desc "Test lib source"
Rake::TestTask.new(:lib) do |t|
t.libs << "test"
t.pattern = 'test/lib/**/*_test.rb'
t.verbose = true
end
end
Mimic cấu trúc của lib
dir của bạn dưới test
dir, thay thế mã lib với các xét nghiệm tương ứng.
Chạy rake test:lib
để chạy thử nghiệm lib của bạn.
Nếu bạn muốn tất cả các thử nghiệm chạy khi bạn gọi rake test
, bạn có thể thêm phần sau vào tệp cào mới của mình.
lib_task = Rake::Task["test:lib"]
test_task = Rake::Task[:test]
test_task.enhance { lib_task.invoke }
Bằng cách nào đó nó không tải lên môi trường (cụ thể là 'fixturesSupport'' fixtures'), và không có cách nào để ép nó trong rakefile. –
Hey, tôi đã thử giải pháp của bạn và kiểm tra 'rake: lib' chạy thử nghiệm của tôi, nhưng' kiểm tra rake' thì không. Tôi đã sao chép nó đúng nguyên văn. Đây là liên kết đến nội dung tập tin của tôi: http://pastebin.com/FHMXU6vG Cảm ơn bạn trước! – robert
tôi đã tìm cách để làm điều tương tự nhưng với rspec & autospec và phải mất một chút đào để tìm ra chỉ là nơi họ đã nhận được danh sách các mẫu thư mục/tập tin đó quyết mà file test để chạy. Cuối cùng, tôi thấy điều này trong lib/nhiệm vụ/rspec.rake: 86
[:models, :controllers, :views, :helpers, :lib, :integration].each do |sub|
desc "Run the code examples in spec/#{sub}"
Spec::Rake::SpecTask.new(sub => spec_prereq) do |t|
t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
end
end
tôi đã đặt thử nghiệm của tôi trong một thư mục đặc tả/libs mới khi tập tin rpsec.rake được cấu hình để tìm kiếm trong spec/lib. Đơn giản chỉ cần đổi tên libs -> lib đã làm các trick!
Tôi có '/ lib' theo mặc định trong dự án của tôi bằng cách nào đó. Thật không may 'kiểm tra rake' không bắt kịp các tệp, vì vậy đây là chỉ RSpec và tôi phải sử dụng giải pháp ở trên. –
Để không xác định thêm tác vụ cào để chạy thử nghiệm từ thư mục được xác định tùy chỉnh, bạn cũng có thể chạy chúng bằng lệnh rake test:all
. Cấu trúc thư mục thử nghiệm cho thư mục lib
hoặc bất kỳ thư mục tùy chỉnh nào khác tùy thuộc vào bạn. Nhưng tôi muốn sao chép chúng trong các lớp học: lib
phù hợp với test/lib
, app/form_objects
đến test/form_objects
.
Cách dễ dàng và gọn gàng chỉ là tạo thư mục theo thử nghiệm/đơn vị/lib. Sau đó, tạo thử nghiệm dưới dạng test/unit/lib/foo_test.rb tương ứng với lib/foo.rb. Không yêu cầu công việc cào mới và bạn có thể lồng thêm nhiều thư mục nếu cần để phù hợp với cấu trúc thư mục lib.
Sử dụng:
[spring] rake test:all
để chạy tất cả các xét nghiệm, bao gồm cả các thư mục mà bạn đã tạo (như [root]/test/lib/
).
Bỏ qua [spring]
nếu bạn không sử dụng.
bị hủy bỏ! Không biết cách xây dựng kiểm tra nhiệm vụ: tất cả ' – Intentss
Tính đến Rails 4.0:
rake test:all # Run all tests in any subdir of `test` without resetting the DB
rake test:all:db # Same as above and resets the DB
Tính đến Rails 4.1, xác định lại test:run
để bao gồm các nhiệm vụ bổ sung khi chạy rake
hoặc rake test
:
# lib/tasks/test.rake
namespace :test do
Rake::Task["run"].clear
task run: ["test:units", "test:functionals", "test:generators", "test:integration", "test:tasks"]
["tasks"].each do |name|
Rails::TestTask.new(name => "test:prepare") do |t|
t.pattern = "test/#{name}/**/*_test.rb"
end
end
end
này có thêm tiền thưởng xác định rake test:tasks
trong ví dụ cho .
Kể từ Rails 4.2, test:run
bao gồm tất cả các subdirs test
bao gồm cả các số này khi chạy rake test
và do đó rake
.
Trong Rails 5, các tác vụ khác nhau này không còn tồn tại. – Qqwy
- 1. Đường ray: Đăng nhập mã trong thư mục lib?
- 2. Đường ray irb thư mục mặc định
- 3. Cách kiểm tra môi trường đường ray?
- 4. Kiểm tra spam trong đường ray
- 5. Kiểm tra rspec cho mã dưới lib/go ở đâu?
- 6. Kiểm tra đường ray cho loại băm
- 7. Đường ray: Cách kiểm tra tên miền phụ bằng RSpec
- 8. Thư mục lib Rails
- 9. Nhiều thư mục công cộng, cài đặt đường ray đơn
- 10. Thực hiện Kiểm tra mã Resharper trừ thư mục
- 11. minitest, kiểm tra :: đơn vị, và đường ray
- 12. Đường ray: kiểm tra các trường đã sửa đổi
- 13. Cách sử dụng phương thức trợ giúp tuyến đường từ một tệp trong thư mục lib?
- 14. Tạo mã QR trong đường ray
- 15. kiểm tra RSpec trong ruby trên đường ray, không thể tải như tập tin webmock/rspec
- 16. Kiểm tra đơn vị đường ray không tải đồ đạc
- 17. Cách kiểm tra đường dẫn từ xa là một tệp hoặc một thư mục?
- 18. Kiểm tra đường ray: khẳng định hành động hiển thị
- 19. Cách kiểm tra thư mục đã tồn tại trước khi tạo thư mục mới trong JSCH
- 20. Đường ray 3.1.3 phạm vi chưa được kiểm tra
- 21. Làm thế nào để kiểm tra đường ray ETag caching?
- 22. asset_url trong thư trên đường ray 3.1
- 23. Kiểm tra đường ray không thể tìm thấy test_helper
- 24. Làm cách nào để kiểm tra ActiveRecord :: RecordNotFound trong ứng dụng đường ray của tôi?
- 25. Kiểm tra phạm vi đường ray cho nil
- 26. Lỗi với ruby-prof trong Kiểm tra Hiệu suất Đường ray
- 27. Cách kiểm tra với đường dẫn tệp WINAPI là đĩa hoặc tệp hoặc thư mục?
- 28. Cách lấy đường dẫn đến thư mục lib cho gói đã cài đặt
- 29. Maven - Thêm thư mục vào đường dẫn lớp trong khi thực hiện các kiểm tra
- 30. Làm cách nào để kiểm tra xem một biến được định nghĩa trong đường ray?
Tính năng này không hoạt động nữa với Rails 5 – Qqwy