Tôi có vấn đề lạ khi tạo thông số bộ điều khiển cho bộ điều khiển không gian tên khi cũng có bộ điều khiển chung có cùng tên.Thông số bộ điều khiển Rspec trên bộ điều khiển không gian tên tìm bộ điều khiển toàn cục có cùng tên
Tên bộ điều khiển là HomeController
và Backend::HomeController
.
Lưu ý rằng Tôi chưa tạo file app/controllers/backend/home_controller.rb
, chỉ có bộ điều khiển toàn cầu tồn tại app/controllers/home_controller.rb
Vì vậy, tôi hy vọng các thử nghiệm để phát nổ có lỗi, nhưng nó không. Nó trôi qua, tất cả đều xanh và hạnh phúc.
đặc tả của tôi trông như thế này
#spec/controllers/backend/home_controller_spec.rb
require 'rails_helper'
RSpec.describe Backend::HomeController, type: :controller do
before do
user = FactoryGirl.create(:user)
allow(controller).to receive(:authenticate_user!).and_return(true)
allow(controller).to receive(:current_user).and_return(user)
end
describe "GET #index" do
it "returns http success" do
get :index
expect(response).to have_http_status(:success)
end
end
end
Tuy nhiên nếu tôi thay đổi tên trong toàn cầu HomeController
của tôi để cái gì khác, ví dụ như NotMyHomeController
thử nghiệm thất bại với lỗi nói
Unable to autoload constant HomeController, expected app/controllers/home_controller.rb to define it
Mà làm cho tôi nghi ngờ rằng Rspec không bận tâm với phần "Phụ trợ" trong hàm Rspec.describe
.
Tôi có làm điều gì sai hoặc tôi thiếu một số phần quan trọng khác không? IMHO, thông số này không được thông qua (để diễn giải Gandalf).
Tôi đang sử dụng Rails 4.2.6, RSpec-Rails 3.4.2
Cập nhật
Như Max chỉ ra, điều này có lẽ không phải ở vấn đề RSpec nhưng thay vì một cái gì đó với Rails động nạp.
Tuy nhiên tôi đã cố gắng chỉ cần gõ
Backend::HomeController
Trong Rails console, nhưng ở đó tôi nhận được lỗi dự kiến
NameError: uninitialized constant Backend::HomeController
Và according to the Rails guide, cả hai giao diện điều khiển và tự động gọi kiểm tra bộ. Tuy nhiên tôi nghĩ rằng tôi đang đi đúng hướng ở đây.
tôi Tôi đoán rằng Rails autoloader của nó làm một cái gì đó screwy - nó hoạt động bằng cách monkeypatching 'Object.const_missing' mà sẽ có bình thường chỉ cần nâng lên' NameError: uninitialized liên tục Backend :: HomeController'. Nó có rất ít với RSpec. – max
Cảm ơn bạn đã thanh toán bù trừ cho tôi. Bạn có bất kỳ đề xuất nào về cách điều tra Trình tải tự động của Rails thêm không? –
http://guides.rubyonrails.org/autoloading_and_reloading_constants.html – max