Skip to content

Commit

Permalink
Change the expectation for predicate methods
Browse files Browse the repository at this point in the history
Predicate methods typically return true or false, this is part of an
associated bug-fix in rspec/rspec-core#2736 but as rspec-rails is now
a separate entity we must account for this ourselves.

Note some predicates are here by default settings and may be able to
be tidied up in `rspec-rails` 5.
  • Loading branch information
pirj authored and JonRowe committed Jun 10, 2020
1 parent 71c4364 commit c6779d6
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 16 deletions.
30 changes: 29 additions & 1 deletion lib/rspec/rails/configuration.rb
Expand Up @@ -105,7 +105,35 @@ def render_views
end

def render_views?
rendering_views
rendering_views?
end

def rendering_views?
!!rendering_views
end

# Define boolean predicates rather than relying on rspec-core due
# to the bug fix in rspec/rspec-core#2736, note some of these
# predicates are a bit nonsensical, but they exist for backwards
# compatibility, we can tidy these up in `rspec-rails` 5.

This comment has been minimized.

Copy link
@pirj

pirj Jun 10, 2020

Author Member

👍

def fixture_path?
!!fixture_path
end

def global_fixtures?
!!global_fixtures
end

def infer_base_class_for_anonymous_controllers?
!!infer_base_class_for_anonymous_controllers
end

def use_instantiated_fixtures?
!!use_instantiated_fixtures
end

def use_transactional_fixtures?
!!use_transactional_fixtures
end

def infer_spec_type_from_file_location!
Expand Down
38 changes: 23 additions & 15 deletions spec/rspec/rails/configuration_spec.rb
Expand Up @@ -23,18 +23,28 @@
opts ||= {}
default_value = opts[:default]
alias_setting = opts[:alias_with]
query_method = "#{accessor}?".to_sym
predicate_method = "#{accessor}?".to_sym
command_method = "#{accessor}=".to_sym

specify "`##{query_method}` is `#{default_value.inspect}` by default" do
expect(config.send(query_method)).to be(default_value)
specify "`##{accessor}` is `#{default_value.inspect}` by default" do
expect(config.send(accessor)).to eq default_value
end

specify "`##{predicate_method}` is `#{!!default_value}` by default" do
expect(config.send(predicate_method)).to be !!default_value
end

specify "`##{predicate_method}` is `#{!!default_value}` by default" do
expect(config.send(predicate_method)).to be !!default_value
end

describe "`##{command_method}`" do
it "changes `#{query_method}` to the provided value" do
it "changes `#{predicate_method}` to the true for a truthy value" do
config.send(command_method, nil)
expect(config.send(predicate_method)).to be false

This comment has been minimized.

Copy link
@pirj

pirj Jun 10, 2020

Author Member

This seems a bit redundant.
Maybe:

- }.to change { config.send(predicate_method) }.to(true)
+ }.to change { config.send(predicate_method) }.from(false).to(true)
expect {
config.send(command_method, :a_value)
}.to change { config.send(query_method) }.to(:a_value)
}.to change { config.send(predicate_method) }.to(true)
end

it "sets `#{accessor}` to the provided value" do
Expand Down Expand Up @@ -72,8 +82,8 @@

include_examples "adds setting", :rendering_views

specify "`#render_views?` is falsey by default" do
expect(config.render_views?).to be_falsey
specify "`#render_views?` is false by default" do
expect(config.render_views?).to be false
end

specify "`#render_views` sets `render_views?` to `true`" do
Expand All @@ -83,16 +93,14 @@
end

describe "`#render_views=`" do
it "sets `render_views?` to the provided value" do
expect {
config.render_views = false
}.to change { config.render_views? }.from(nil).to(false)
end

it "sets `render_views` to the provided value" do
it "sets `render_views?` to the truthyness of the provided value" do
expect {
config.render_views = :a_value
}.to change { config.render_views? }.to(:a_value)
}.to change { config.render_views? }.from(false).to(true)
# this is repeated to put the value back to false
expect {
config.render_views = false
}.to change { config.render_views? }.from(true).to(false)
end
end
end
Expand Down

0 comments on commit c6779d6

Please sign in to comment.