Chiến lược thực tế để kiểm tra bộ lọc thông số mạnh trong bộ điều khiển Rails với Rspec là gì? (Ngoại trừ những người so khớp shoulda) Làm thế nào để viết kiểm tra thất bại và sau đó làm cho nó màu xanh lá cây?Làm cách nào để kiểm tra tham số mạnh mẽ với Rspec?
Trả lời
Tạo 2 băm với các tham số được mong đợi và tất cả (không hài lòng). Sau đó, vượt qua tất cả các tham số để thực hiện và kiểm tra xem bạn có mô hình đối tượng chỉ nhận các tham số được mong đợi hay không. Nó sẽ không nếu bạn không sử dụng các bộ lọc tham số mạnh. Thêm quyền truy cập vào các thông số và kiểm tra lại kiểm tra.
Ví dụ này:
# action
def create
User.create(params)
end
# spec
it 'creates a user' do
expect_any_instance_of(User).to receive(:create).
with({name: 'Sideshow Bob'}.with_indifferent_access)
post :create, user:
{ first_name: 'Sideshow', last_name: 'Bob', name: 'Sideshow Bob' }
end
sẽ vượt qua tất cả params cho người dùng và thử nghiệm sẽ thất bại. Và khi bạn lọc chúng:
def user_params
params.require(:user).permit(:name)
end
và thay đổi hành động với User.create(user_params)
, kiểm tra sẽ vượt qua.
'create' là một phương thức mức lớp được định nghĩa trên' ActiveRecord :: Base' và được thừa hưởng bởi 'Người dùng'. Vì vậy, trong khi 'expect_any_instance (User)' (giả định giả định trên một thể hiện 'User') _might_ work,' expect (User) '(giả sử giả trên lớp' User') cũng sẽ hoạt động và tối thiểu. – dleve123
Sau đây là cách tôi đã làm nó:
describe 'Safe Params' do
let(:mixed_params) {
{
blueprint_application_environment: {
id: 1000,
blueprint_id: 1,
application_id: 2,
environment_id: 3
},
format: :json
}
}
context "when processing a Post request with a mix of permitted and unpermitted parameters" do
before { post :create, mixed_params }
it "a create will not set the value of the unpermitted parameter" do
expect(JSON.parse(response.body)["id"]).not_to eq(1000)
end
it "a create will set the value of the permitted parameters" do
expect(JSON.parse(response.body)["blueprint_id"]).to eq(1)
expect(JSON.parse(response.body)["application_id"]).to eq(2)
expect(JSON.parse(response.body)["environment_id"]).to eq(3)
end
end
cuối
đang điều khiển:
def create
@blueprint_application_environment = BlueprintApplicationEnvironment.new(blueprint_application_environment_params)
if @blueprint_application_environment.save
render 'show.json.jbuilder'
else
render json: @blueprint_application_environment.errors, status: :unprocessable_entity
end
end
def blueprint_application_environment_params
params.require(:blueprint_application_environment).permit(:blueprint_id, :application_id, :environment_id)
end
Cá nhân tôi sử dụng shoulda-matcher từ thoughtbot.
Với một cái gì đó như:
it do
should permit(:first_name, :last_name, :email, :password).
for(:update, params: params)
end
như như bạn tạo hoặc cập nhật đối tượng sử dụng các thông số mạnh mẽ, nó cũng tương tự như ngoại trừ một điều mà bình thường bạn làm như thế này:
bài: tạo, book_id: @ book.id
Nhưng trong tham số mạnh bạn phải làm như thế này:
bài: tạo, {book_id: @ book.id, bình luận: {user_id: 101, book_id: @ book.id, mô tả: "đáng mua"}}
bạn có để truyền vào các tham số lồng nhau.
- 1. RSpec - Kiểm tra thông số mạnh
- 2. Làm thế nào để kiểm tra Mongoid :: Observer với rspec
- 3. Lỗi với mutex mạnh mẽ
- 4. Kiểm tra RSpec ArgumentError trên phương thức có tham số
- 5. Rails 4 - thông số mạnh mẽ với giàn giáo - params.fetch
- 6. Rails thông số mạnh mẽ với các đối tượng mảng
- 7. Kiểm tra ActionMailer với rspec
- 8. Số ngẫu nhiên mạnh mẽ Thế hệ
- 9. Rspec: Làm thế nào để kiểm tra đệ quy?
- 10. Kiểm tra xem RSpec: Cách sửa đổi thông số?
- 11. Làm cách nào để tạo khóa thông số mạnh tùy chọn nhưng vẫn lọc tham số được lồng trong đó?
- 12. Kiểm tra send_file RSpec
- 13. Triển khai TEE mạnh mẽ
- 14. TryUpdateModel so với tham số phương pháp gõ mạnh
- 15. Làm thế nào để kiểm tra ThinkingSphinx sử dụng RSpec
- 16. Làm thế nào để kiểm tra RSpec thất bại?
- 17. Kiểm tra Rspec delay_job
- 18. Kiểm soát truy cập mạnh mẽ cho Gollum?
- 19. VB.NET gõ nhẹ? mạnh mẽ đánh máy?
- 20. Kiểm tra ActiveSupport :: Thông báo với rspec
- 21. làm cách nào để tạo một dĩa interop có tên mạnh mẽ cho shdocvw.dll
- 22. Kiểm tra lỗi RSpec
- 23. Rails params mạnh mẽ với "chấm" trong tên
- 24. Làm cách nào để kiểm tra biến cục bộ bên trong bộ điều khiển với Rspec?
- 25. iVars tham chiếu mạnh mẽ, yếu hoặc gì?
- 26. Kiểm tra Mô-đun Ruby với rspec
- 27. POST tham số để kiểm tra PHPUnit
- 28. Làm cách nào để kiểm tra xem thông số mẫu có phải là một tham số của hai không?
- 29. Cách kiểm tra đặt trong rspec
- 30. Làm cách nào để ngắt kết nối máy khách một cách mạnh mẽ trong SignalR
Câu trả lời của tôi có giúp ích không? Có lẽ tôi có thể làm rõ điều gì đó. – zishe
Cảm ơn bạn, bạn thực sự đã giúp tôi. Tôi không biết về with_indifferent_access. Và cách kiểm tra các yêu cầu thuộc tính, như params.require: user? – Molfar