Я с трудом пытаюсь выяснить, как проверить сильные параметры с помощью rspec и shoulda_matchers.
Независимо от того, что я пробовал, я всегда получаю сообщение: RSpec::Expectations::ExpectationNotMetError: Expected POST #create to restrict parameters on :language_name to :name,
but it did not restrict any parameters.
Это мой контроллер:
class LanguageNamesController < CrudController
inherit_resources
actions :all, :except => [:show]
private
def language_name_params
params.require(:language_name).permit(:name)
end
end
Это тест:
require 'rails_helper'
RSpec.describe LanguageNamesController, type: :controller do
describe "parameters" do
it do
lm_params = {
language_name: {
name: 'John'
}
}
expect(subject).to permit(:name).for(:create, params: { params: lm_params }).on(:language_name)
end
end
end
Кроме того, я пробовал это и получил тот же результат:
it do
subject.params = ActionController::Parameters.new(language_name: {foo: 'bar', name: 'baz'})
expect(subject).to permit(:name).for(:create).on(:language_name)
end
если я попробую вот так, я получу ArgumentError: unknown keyword: language_name
:
it do
lm_params = {
language_name: {
name: 'John'
}
}
expect(subject).to permit(:name).for(:create, params: lm_params).on(:language_name)
end
Я использую:
- ruby 2.5.1
- rails5.1.6
- musta-matchers 3.1.2
Кто-нибудь знает, как решить эту проблему?
Спасибо!
Этомой обходной путь, чтобы проверить это:
it do
faker_name = Faker::Name.name
params = {
language_name: {name: faker_name, other_attribute: "other value"},
extra: {extra: 1}
}
get :index, params: params
expect(subject.send(:language_name_params)).to eq({"name"=> faker_name})
end