Skip to content

Commit

Permalink
Merge pull request #2353 from rspec/be_true_to_yourself
Browse files Browse the repository at this point in the history
Change the expectation for predicate methods
  • Loading branch information
JonRowe committed Jun 10, 2020
2 parents 71c4364 + 9d5c6ee commit e3a0353
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 16 deletions.
32 changes: 31 additions & 1 deletion lib/rspec/rails/configuration.rb
@@ -1,3 +1,4 @@
# rubocop: disable Metrics/ModuleLength
module RSpec
module Rails
# Fake class to document RSpec Rails configuration options. In practice,
Expand Down Expand Up @@ -105,7 +106,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.
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 Expand Up @@ -156,3 +185,4 @@ def filter_rails_from_backtrace!
initialize_configuration RSpec.configuration
end
end
# rubocop: enable Metrics/ModuleLength
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
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 e3a0353

Please sign in to comment.