InferredSpecType not working with Rails 8.
Closed this issue · 3 comments
joel commented
The exact same view spec pass with
Ruby version: 3.3.6
Rails version: 7.2.2
RSpec version: 7.1.0
but fails with
Ruby version: 3.3.6
Rails version: 8.0.0
RSpec version: 7.1.0
require "rails_helper"
RSpec.describe "users/new" do
before do
assign(:user, User.new(name: "MyString"))
end
it "renders new user form" do
render
assert_select "form[action=?][method=?]", users_path, "post" do
assert_select "input[name=?]", "user[name]"
end
end
end
NoMethodError:
undefined method `assign' for #<RSpec::ExampleGroups::UsersNew0x000000012e4d0150>
joel commented
Okay, it feels the InferredSpecType is failing to do its job, adding type: :view make it works.
require "rails_helper"
RSpec.describe "users/new", type: :view do
before do
assign(:user, User.new(name: "MyString"))
end
it "renders new user form" do
render
assert_select "form[action=?][method=?]", users_path, "post" do
assert_select "input[name=?]", "user[name]"
end
end
end
Is passing
pirj commented
Is this spec generated or hand-written?
With inferring option and turned off, you have to add type metadata.
The cop doesn’t fail, it is marked as unsafe and for a good reason - it has no way to know if inferring is on or off. If inferring is off, disable it immediately the cop, it’s what its doc says.
joel commented
Okay, I see this is a recent change Comment out infer_spec_type_from_file_location! in generated rails_helper.rb, I use a template to set up my rails app, I did not spot that regression. Thanks.