I'm using the following CSP
header("Content-Security-Policy: object-src 'none'; style-src 'self' 'strict-dynamic' ; script-src 'nonce-".$this->pageData->corsNonce['mainJS']."' 'nonce-".$this->pageData->corsNonce['twitterFeed']."' 'strict-dynamic' ; frame-src https://platform.twitter.com/ https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/releases/tftmXwdbgCvrXiHxr5HGbIaL/; default-src 'self' https://platform.twitter.com/ https://www.".$GLOBALS['PS']->siteNameNonWWW." 'strict-dynamic';");
the only way i can get it to work is by making the style "unsafe-inline" which basically means the CSP is pointless.
I have added this as per the twitter docs <meta content="on" name="twitter:widgets:csp">
Im still getting all these errors
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-nBgB6cwZqnfrMp3dIoMlryBNMGi3lqt6zDfOlsM/uwQ='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
6Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' <URL> <URL> 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-3zC5aZ7mL1/H7Okaxa0bNmOgHvkG9IwnFWdzK9sV4ek='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-W8ZPF9qOhYdwnWllgm0/H0Nza2RB+2lL4/NcSDMURYM='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-RTBZ4ChJJI5KtanbP4/OuMgGOQk1cqFU203V48mWRMw='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-RTBZ4ChJJI5KtanbP4/OuMgGOQk1cqFU203V48mWRMw='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-AiIIJTmp6KuDsDcbYjHAPgdi2KRwfho027VuZVwIjF0='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-nBgB6cwZqnfrMp3dIoMlryBNMGi3lqt6zDfOlsM/uwQ='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-vzjrJFpozgOR+wRUV14btg0zyQfVPaJEKBx102w/Rfk='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-nBgB6cwZqnfrMp3dIoMlryBNMGi3lqt6zDfOlsM/uwQ='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-nBgB6cwZqnfrMp3dIoMlryBNMGi3lqt6zDfOlsM/uwQ='), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
87Refused to load the image '<URL>' because it violates the following Content Security Policy directive: "default-src 'self' <URL> 'strict-dynamic'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.
widgets.js:8 Refused to load the stylesheet 'https://ton.twimg.com/tfw/css/syndication_bundle_v1_73385286cca9d2256f6bf3993470820d4827b058.css' because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Note that 'style-src-elem' was not explicitly set, so 'style-src' is used as a fallback.
(anonymous) # widgets.js:8
(anonymous) # widgets.js:1
(anonymous) # widgets.js:1
o.run # widgets.js:8
o.flush # widgets.js:8
o.runBatch # widgets.js:8
(anonymous) # widgets.js:8
i # widgets.js:8
(anonymous) # widgets.js:8
requestAnimationFrame (async)
o.loop # widgets.js:8
o.schedule # widgets.js:8
o.scheduleBatch # widgets.js:8
o.write # widgets.js:8
write # widgets.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
i # widgets.js:1
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
Promise.then (async)
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
Promise.then (async)
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
Promise.then (async)
(anonymous) # widgets.js:8
i # widgets.js:1
(anonymous) # widgets.js:8
s._flush # widgets.js:8
(anonymous) # widgets.js:1
h # widgets.js:8
characterData (async)
w # widgets.js:8
o # widgets.js:8
s.add # widgets.js:8
addWidget # widgets.js:8
(anonymous) # widgets.js:8
g # widgets.js:8
(anonymous) # widgets.js:8
Promise.then (async)
w # widgets.js:8
loadPage # widgets.js:8
(anonymous) # widgets.js:8
o # widgets.js:8
(anonymous) # widgets.js:8
i # widgets.js:1
(anonymous) # widgets.js:1
(anonymous) # widgets.js:1
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-1eNW3sA4kFhE/L1XqcPKTI+WEaM0DkVXQdBZ3wredo8='), or a nonce ('nonce-...') is required to enable inline execution.
(anonymous) # widgets.js:8
(anonymous) # widgets.js:1
o.run # widgets.js:8
o.flush # widgets.js:8
o.runBatch # widgets.js:8
(anonymous) # widgets.js:8
i # widgets.js:8
(anonymous) # widgets.js:8
widgets.js:8 Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://syndication.twitter.com/ https://platform.twitter.com/ 'strict-dynamic'". Either the 'unsafe-inline' keyword, a hash ('sha256-DdW8fWwumDjO9065QATtOV60fImuwIMEyMbaepWLUSo='), or a nonce ('nonce-...') is required to enable inline execution.
(anonymous) # widgets.js:8
(anonymous) # widgets.js:1
o.run # widgets.js:8
o.flush # widgets.js:8
o.runBatch # widgets.js:8
(anonymous) # widgets.js:8
i # widgets.js:8
(anonymous) # widgets.js:8
/#nftpeel:1 Uncaught (in promise) Event {isTrusted: true, type: 'error', target: link, currentTarget: null, eventPhase: 0, …}
Promise.then (async)
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
i # widgets.js:1
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
Promise.then (async)
(anonymous) # timeline.55167c7072ca7f4363bf18820295ba93.js:1
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
c.render # widgets.js:8
(anonymous) # widgets.js:1
Promise.then (async)
(anonymous) # widgets.js:8
(anonymous) # widgets.js:8
Promise.then (async)
(anonymous) # widgets.js:8
i # widgets.js:1
(anonymous) # widgets.js:8
s._flush # widgets.js:8
(anonymous) # widgets.js:1
h # widgets.js:8
characterData (async)
w # widgets.js:8
o # widgets.js:8
s.add # widgets.js:8
addWidget # widgets.js:8
(anonymous) # widgets.js:8
g # widgets.js:8
(anonymous) # widgets.js:8
Promise.then (async)
w # widgets.js:8
loadPage # widgets.js:8
(anonymous) # widgets.js:8
o # widgets.js:8
(anonymous) # widgets.js:8
i # widgets.js:1
(anonymous) # widgets.js:1
(anonymous) # widgets.js:1
How is it possible to add a nonce to a twitter feed's inline style?
Why does the twitter meta CSP on not do anything despite the developer docs saying to use it?
This is really annoying me.
Thanks in advance.
Related
I am trying to test if a users input is valid using Capybara. I am following https://github.com/jnicklas/capybara#using-capybara-with-rspec and am having problems with referencing the root. As you can see in my rails_helper I have already included config.includeRails.application.routes.url_helpers. This should give me access to the appropriate helper methods right? Any help would be much appreciated.
console error
Failure/Error: visit root
NameError:
undefined local variable or method `root for #<RSpec::ExampleGroups::UserInputsPhonenumber:0x007fce5abaa970>
user_inputs_phone_number_spec.rb
require 'spec_helper'
feature 'User inputs phonenumber' do
it 'returns sent if valid input', :js=>true do
visit root
within('.intl-tel-input allow-dropdown') do
fill_in 'phone', :with => 'xxxxxxxxxx'
end
click_button 'submit-btn'
expect(page).to have_content 'Sent!'
end
end
Gemfile
source 'https://rubygems.org'
# ruby "2.2.1"
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.6'
# Use postgresql as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# Added to rails
gem 'mixpanel-ruby', '~> 2.2'
gem 'twilio-ruby', '~> 4.11', '>= 4.11.1'
gem 'momentjs-rails', '~> 2.11', '>= 2.11.1'
gem 'rails_12factor', group: :production
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Unicorn as the app server
# gem 'unicorn'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
# Use remote_syslog_logger gem to send logs to sumologic
gem 'remote_syslog_logger'
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug'
gem 'spork'
gem 'rspec-rails', '~> 3.5'
gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git'
# Access an IRB console on exception pages or by using <%= console %> in views
gem 'web-console', '~> 2.0'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
end
spec_helper.rb
require 'capybara/rspec'
require 'rubygems'
# This file was generated by the `rails generate rspec:install` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause
# this file to always be loaded, without a need to explicitly require it in any
# files.
#
# Given that it is always loaded, you are encouraged to keep this file as
# light-weight as possible. Requiring heavyweight dependencies from this file
# will add to the boot time of your test suite on EVERY test run, even for an
# individual file that may not need all of that loaded. Instead, consider making
# a separate helper file that requires the additional dependencies and performs
# the additional setup, and require it from the spec files that actually need
# it.
#
# The `.rspec` file also contains a few flags that are not defaults but that
# users commonly want.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
ENV["RAILS_ENV"] ||= 'test'
RSpec.configure do |config|
# rspec-expectations config goes here. You can use an alternate
# assertion/expectation library such as wrong or the stdlib/minitest
# assertions if you prefer.
config.expect_with :rspec do |expectations|
# This option will default to `true` in RSpec 4. It makes the `description`
# and `failure_message` of custom matchers include text for helper methods
# defined using `chain`, e.g.:
# be_bigger_than(2).and_smaller_than(4).description
# # => "be bigger than 2 and smaller than 4"
# ...rather than:
# # => "be bigger than 2"
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
# rspec-mocks config goes here. You can use an alternate test double
# library (such as bogus or mocha) by changing the `mock_with` option here.
config.mock_with :rspec do |mocks|
# Prevents you from mocking or stubbing a method that does not exist on
# a real object. This is generally recommended, and will default to
# `true` in RSpec 4.
mocks.verify_partial_doubles = true
end
# config.include Rails.application.routes.url_helpers
# This option will default to `:apply_to_host_groups` in RSpec 4 (and will
# have no way to turn it off -- the option exists only for backwards
# compatibility in RSpec 3). It causes shared context metadata to be
# inherited by the metadata hash of host groups and examples, rather than
# triggering implicit auto-inclusion in groups with matching metadata.
config.shared_context_metadata_behavior = :apply_to_host_groups
# The settings below are suggested to provide a good initial experience
# with RSpec, but feel free to customize to your heart's content.
=begin
# This allows you to limit a spec run to individual examples or groups
# you care about by tagging them with `:focus` metadata. When nothing
# is tagged with `:focus`, all examples get run. RSpec also provides
# aliases for `it`, `describe`, and `context` that include `:focus`
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
config.filter_run_when_matching :focus
# Allows RSpec to persist some state between runs in order to support
# the `--only-failures` and `--next-failure` CLI options. We recommend
# you configure your source control system to ignore this file.
config.example_status_persistence_file_path = "spec/examples.txt"
# Limits the available syntax to the non-monkey patched syntax that is
# recommended. For more details, see:
# - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
# - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
config.disable_monkey_patching!
# Many RSpec users commonly either run the entire suite or an individual
# file, and it's useful to allow more verbose output when running an
# individual spec file.
if config.files_to_run.one?
# Use the documentation formatter for detailed output,
# unless a formatter has already been configured
# (e.g. via a command-line flag).
config.default_formatter = 'doc'
end
# Print the 10 slowest examples and example groups at the
# end of the spec run, to help surface which specs are running
# particularly slow.
config.profile_examples = 10
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = :random
# Seed global randomization in this process using the `--seed` CLI option.
# Setting this allows you to use `--seed` to deterministically reproduce
# test failures related to randomization by passing the same `--seed` value
# as the one that triggered the failure.
Kernel.srand config.seed
=end
end
Capybara.configure do |c|
c.app_host = "http://localhost:3000"
end
rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
# Checks for pending migration and applies them before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
config.include Rails.application.routes.url_helpers
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, :type => :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
config.include Capybara::DSL
# Filter lines from Rails gems in backtraces.
config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
end
routes.rb
Rails.application.routes.draw do
get 'download' => 'invites#show', constraints: { subdomain: 'come' }
# welcome
root 'welcome#index'
get 'welcome/index'
get 'dl' => 'welcome#download'
get 'download' => 'welcome#download'
get 'send_invite' => 'welcome#send_invite'
get 'intern' => 'welcome#intern'
get '/apple-app-site-association' => 'welcome#apple_app_site_association'
# invites
get '/i/:k' => 'invites#show'
get 'invite/:title/:k' => 'invites#show_share'
get 'update_invite/:invite_key/:phone/:first/:last/:iso_code' => 'invites#update'
# lists
get 'list/:list_name/:list_key' => 'welcome#share_list'
get 'lists/:list_name/:list_key' => 'welcome#share_list'
get 'list/:list_key' => 'welcome#share_list'
get 'update_list/:list_key/:phone/:first/:last/:iso_code' => 'welcome#add_shared_list'
# healthchecks
get 'healthcheck-app' => 'welcome#healthcheck_app'
get 'healthcheck-all' => 'welcome#healthcheck_all'
# policy pages
get 'privacy-policy' => 'welcome#privacy_policy'
get 'terms' => 'welcome#terms'
get 'download-agreement' => 'welcome#download_agreement'
end
Edit
After adding include 'rails_helper' to the top of my spec. I get an error of /Users/jacobshafi/Desktop/Code/web/config/initializers/environment_variables.rb:7:inblock in ': undefined method each' for nil:NilClass (NoMethodError)
environment_variables.rb
module EnvironmentVariablesExample
class Application < Rails::Application
config.before_configuration do
env_file = Rails.root.join("config", 'environment_variables.yml').to_s
if File.exists?(env_file)
YAML.load_file(env_file)[Rails.env].each do |key, value|
ENV[key.to_s] = value
end # end YAML.load_file
end # end if File.exists?
end # end config.before_configuration
end # end class
end # end module
You should be calling
visit root_path
and you should be requiring rails_helper, rather than spec_helper. since rails_helper is where the url helpers get included - 'config.include Rails.application.routes.url_helpers'. To fix the error you get from doing that we'd need to see the contents of config/initializers/environment_variables.rb
I recently started adding tests to my app and I am facing some issues regarding the controllers tests. When I try to run any controller test I get this error:
-> bundle exec rspec -c -b spec/controllers/culture_test_controller_spec.rb
ActiveRecord::SchemaMigration Load (0.6ms) SELECT "schema_migrations".* FROM "schema_migrations"
/home/rodras/Github/talentank/spec/controllers/culture_test_controller_spec.rb:4:in `<top (required)>': uninitialized constant CultureTestController (NameError)
The strange thing is that all the models tests seem to be working fine, that is why I assume that the issue is not in rails_helper.rb nor in spec_helper.rb
I have already check questions that seemed to have the same problem such as: RSpec Cannot find my Controllers Uninitialized Constant but the solutions offered there didn't help me
These are my files. If there is any other file that you need in order solve the question please let me know, and I will update the question.
rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'shoulda/matchers'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.include FactoryGirl::Syntax::Methods
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, :type => :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
end
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
spec_helper.rb
require File.expand_path("../../config/environment", __FILE__)
# This file was generated by the `rails generate rspec:install` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause this
# file to always be loaded, without a need to explicitly require it in any files.
#
# Given that it is always loaded, you are encouraged to keep this file as
# light-weight as possible. Requiring heavyweight dependencies from this file
# will add to the boot time of your test suite on EVERY test run, even for an
# individual file that may not need all of that loaded. Instead, consider making
# a separate helper file that requires the additional dependencies and performs
# the additional setup, and require it from the spec files that actually need it.
#
# The `.rspec` file also contains a few flags that are not defaults but that
# users commonly want.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
# rspec-expectations config goes here. You can use an alternate
# assertion/expectation library such as wrong or the stdlib/minitest
# assertions if you prefer.
config.expect_with :rspec do |expectations|
# This option will default to `true` in RSpec 4. It makes the `description`
# and `failure_message` of custom matchers include text for helper methods
# defined using `chain`, e.g.:
# be_bigger_than(2).and_smaller_than(4).description
# # => "be bigger than 2 and smaller than 4"
# ...rather than:
# # => "be bigger than 2"
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
# rspec-mocks config goes here. You can use an alternate test double
# library (such as bogus or mocha) by changing the `mock_with` option here.
config.mock_with :rspec do |mocks|
# Prevents you from mocking or stubbing a method that does not exist on
# a real object. This is generally recommended, and will default to
# `true` in RSpec 4.
mocks.verify_partial_doubles = true
end
# For using same seed as development environment
config.before(:all) do
#load Rails.root + "db/seeds.rb"
Rails.application.load_seed # loading seeds
end
# The settings below are suggested to provide a good initial experience
# with RSpec, but feel free to customize to your heart's content.
begin
# These two settings work together to allow you to limit a spec run
# to individual examples or groups you care about by tagging them with
# `:focus` metadata. When nothing is tagged with `:focus`, all examples
# get run.
config.filter_run :focus
config.run_all_when_everything_filtered = true
# Limits the available syntax to the non-monkey patched syntax that is recommended.
# For more details, see:
# - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
# - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
# - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
config.disable_monkey_patching!
# Many RSpec users commonly either run the entire suite or an individual
# file, and it's useful to allow more verbose output when running an
# individual spec file.
if config.files_to_run.one?
# Use the documentation formatter for detailed output,
# unless a formatter has already been configured
# (e.g. via a command-line flag).
config.default_formatter = 'doc'
end
# Print the 10 slowest examples and example groups at the
# end of the spec run, to help surface which specs are running
# particularly slow.
config.profile_examples = 10
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = :random
# Seed global randomization in this process using the `--seed` CLI option.
# Setting this allows you to use `--seed` to deterministically reproduce
# test failures related to randomization by passing the same `--seed` value
# as the one that triggered the failure.
Kernel.srand config.seed
end
end
One of my controller tests: spec/controllers/culture_test_controller_spec.rb
require 'rails_helper'
require 'rspec/its'
RSpec.describe CultureTestController, type: :controller do
describe "GET #index" do
it "returns a specific culture test" do
culture_test = FactoryGirl(:culture_test)
get :index
expect(response).to render_text(:culture_test)
end
it "returns all the culture tests" do
culture_test = FactoryGirl(:invalid_culture_test)
get :index
expect(response).to render_text(CultureTest.all)
end
end
end
The respective controller: culture_test_controller.rb
module Api
class CultureTestController < ApplicationController
before_action :find_culture_test, only: [:show, :edit, :update, :registration, :results]
def index
if(params[:company_id] != nil && params[:title] != nil)
respond_to do |format|
format.json{
render text: CultureTest.where(:company_id => params[:company_id]).where(:title => params[:title]).first.to_json
}
end
else
respond_to do |format|
format.json{
render text: CultureTest.all.to_json
}
end
end
end
Gemfile:
source 'https://rubygems.org'
ruby "2.1.3"
### APP DEFAULT GEMS
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
gem 'sprockets', '2.12.3'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
# Removed so that we can use AngularJS
# gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
gem 'responders'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# Bower package manager
gem 'bower-rails'
gem 'rails-html-sanitizer'
### FRONT-END STUFF
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Using the jQuery UI framework
gem 'jquery-ui-rails'
# And some nice jQuery gems
gem 'jquery-validation-rails'
gem 'jquerymobile-rails'
# Talentank's front-end devs prefer haml over erb
gem 'haml'
# Zurb's Foundation as HTML+CSS framework
gem 'foundation-rails'
# We want to use the Foundation icons too
gem 'foundation-icons-sass-rails'
# Font Awesome: awesome icons
gem "font-awesome-rails"
# Animate.css as a Rails gem (simple CSS animations)
gem 'animate-rails'
# EU cookies law
gem 'cookies_eu'
# Angular templates for simple Angular templates as asset referencing
gem 'angular-rails-templates'
# Gem for authenticate with protection token
gem 'angular_rails_csrf'
### BACK-END STUFF
# let's use PostgreSQL. Yay!
gem 'pg'
# let's get rid of that webrick crap
gem "puma"
# Devise as user authenticator and session management
gem 'devise'
# gem 'devise_token_auth' # Token based authentication for Rails JSON APIs
# gem 'omniauth' # required for devise_token_auth
# Paperclip allows us to attach files (such as logos in company profiles)
gem 'paperclip'
# i18n for internationalization (app translation)
gem 'i18n'
gem 'i18n-js'
# Globalize is used to translate the database
gem 'globalize'
# Simple_form for, guess what, simple forms
gem 'simple_form'
# Allows country selection in simple form
gem 'country_select'
# mail_form for simple, yet nice contact forms
gem 'mail_form'
### DEVOPS STUFF (anything related to the logistics of deploying the app)
# rails_12factor has to do with Heroku and devops
gem 'rails_12factor'
# yaml_db: db migrations to heroku
gem 'yaml_db'
# Backend for working in background
gem 'delayed_job_active_record'
# To run jobs
gem 'daemons'
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug'
# Access an IRB console on exception pages or by using <%= console %> in views
gem 'web-console', '~> 2.0'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'rspec-rails'
gem 'rspec-its'
gem 'shoulda-matchers', require: false# Helps with the test models with belongs_to and has_many
# Fuubar formats RSpec output in a nice way
# gem 'fuubar'
#FactoryGirl is a library for setting up Ruby objects as test data.
gem 'factory_girl_rails'
#Faker for creating fake dummy fields
gem 'faker'
gem 'mailcatcher'
end
I think the problem might be here
spec/controllers/culture_test_controller_spec.rb
RSpec.describe CultureTestController, type: :controller do
It should be:
RSpec.describe Api::CultureTestController, type: :controller do
I'm having an issue with a factory that is using associations. I had it working for awhile but had to backup to some lower versions of various gems and cannot get it working anymore.
The error I get is the following:
Failures:
1) PoolMembership
Failure/Error: let(:season) { FactoryGirl.create(:season_with_weeks) }
ArgumentError:
wrong number of arguments (1 for 0)
And the backtrace shows the following line from my factories.rb as the problem:
transient do
**number_of_weeks 1**
end
I double checked the FactoryGirl documentation and it looks like I'm doing exactly what the documentation states. So, I'm assuming I've got a configuration error of some kind or I'm trying to do something with the wrong version of one the gems.
Here is my factories.rb
FactoryGirl.define do
factory :week do
state 0
week_number 1
season
end
factory :season do
year "2015"
state 0
nfl_league 1
current_week 1
number_of_weeks 1
factory :season_with_weeks do
transient do
num_weeks 1
end
after(:create) do |season, evaluator|
create_list(:week, evaluator.num_weeks, season: season)
season.number_of_weeks = evaluator.num_weeks
end
end
end
end
And here is the rspec file that I'm using to test it out.
spec/models/pool_membership_spec.rb:
describe PoolMembership do
let(:season) { FactoryGirl.create(:season_with_weeks) }
...
end
And since I think this might be a configuration or version level issue, here are my Gemfile, spec/rails_helper.rb, and spec_helper.rb files.
Gemfile
source 'https://rubygems.org'
ruby '2.0.0'
#ruby-gemset=Rails_fb
gem 'rails','4.1.1'
gem 'bcrypt-ruby', '3.1.2'
gem 'annotate'
gem 'faker', '1.1.2'
gem 'select2-rails'
gem 'simple_form', '3.1.1'
gem 'cocoon'
#
# Bootstrap support gems
#
gem 'bootstrap-sass'
gem 'bootstrap-will_paginate', '0.0.9'
gem 'font-awesome-sass', '4.1.0'
gem 'sass-rails', '~> 4.0.2'
#gem 'select2-sass-bootstrap-rails'
# Database. Using the same database for production/development
gem 'pg'
group :development, :test do
gem 'rspec-rails', '~>3.0'
gem 'guard-rspec', '~> 4.2'
gem 'spork-rails'
gem 'guard-spork'
gem 'childprocess', '0.3.6'
gem 'letter_opener_web', '~>1.2.0'
end
group :test do
gem 'selenium-webdriver', '2.35.1'
gem 'capybara', '2.2.0'
gem 'factory_girl_rails', '4.2.1'
gem 'libnotify', '0.8.0'
end
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.0'
gem 'jquery-rails', '2.2.1'
gem 'jquery-turbolinks', '2.0.1'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'
group :doc do
gem 'sdoc', '0.3.20', require: false
end
group :production do
gem 'rails_12factor', '0.0.2'
end
# To use debugger
# gem 'debugger'
gem 'execjs'
gem 'therubyracer', :platforms => :ruby
spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, :type => :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
end
and spec/spec_helper.rb
# This file was generated by the `rails generate rspec:install` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause
# this file to always be loaded, without a need to explicitly require it in any
# files.
#
# Given that it is always loaded, you are encouraged to keep this file as
# light-weight as possible. Requiring heavyweight dependencies from this file
# will add to the boot time of your test suite on EVERY test run, even for an
# individual file that may not need all of that loaded. Instead, consider making
# a separate helper file that requires the additional dependencies and performs
# the additional setup, and require it from the spec files that actually need
# it.
#
# The `.rspec` file also contains a few flags that are not defaults but that
# users commonly want.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
# rspec-expectations config goes here. You can use an alternate
# assertion/expectation library such as wrong or the stdlib/minitest
# assertions if you prefer.
config.expect_with :rspec do |expectations|
# This option will default to `true` in RSpec 4. It makes the `description`
# and `failure_message` of custom matchers include text for helper methods
# defined using `chain`, e.g.:
# be_bigger_than(2).and_smaller_than(4).description
# # => "be bigger than 2 and smaller than 4"
# ...rather than:
# # => "be bigger than 2"
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
# rspec-mocks config goes here. You can use an alternate test double
# library (such as bogus or mocha) by changing the `mock_with` option here.
config.mock_with :rspec do |mocks|
# Prevents you from mocking or stubbing a method that does not exist on
# a real object. This is generally recommended, and will default to
# `true` in RSpec 4.
mocks.verify_partial_doubles = true
end
# The settings below are suggested to provide a good initial experience
# with RSpec, but feel free to customize to your heart's content.
=begin
# These two settings work together to allow you to limit a spec run
# to individual examples or groups you care about by tagging them with
# `:focus` metadata. When nothing is tagged with `:focus`, all examples
# get run.
config.filter_run :focus
config.run_all_when_everything_filtered = true
# Allows RSpec to persist some state between runs in order to support
# the `--only-failures` and `--next-failure` CLI options. We recommend
# you configure your source control system to ignore this file.
config.example_status_persistence_file_path = "spec/examples.txt"
# Limits the available syntax to the non-monkey patched syntax that is
# recommended. For more details, see:
# - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
# - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
config.disable_monkey_patching!
# Many RSpec users commonly either run the entire suite or an individual
# file, and it's useful to allow more verbose output when running an
# individual spec file.
if config.files_to_run.one?
# Use the documentation formatter for detailed output,
# unless a formatter has already been configured
# (e.g. via a command-line flag).
config.default_formatter = 'doc'
end
# Print the 10 slowest examples and example groups at the
# end of the spec run, to help surface which specs are running
# particularly slow.
config.profile_examples = 10
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = :random
# Seed global randomization in this process using the `--seed` CLI option.
# Setting this allows you to use `--seed` to deterministically reproduce
# test failures related to randomization by passing the same `--seed` value
# as the one that triggered the failure.
Kernel.srand config.seed
=end
end
I found this answer in another problem. Apparently, I was reading the documentation for version 5.0 of FactoryGirl but using version 4.4.0 which doesn't support transient, it uses ignore instead. So, just needed to change from transient to ignore.
was:
transient do
num_weeks 1
end
Changed to:
ignore do
num_weeks 1
end
I'm trying to get spork working with a rails 2.3.18 app
Here is part of my gemfile showing Rspec versions:
gem "rails", "2.3.18"
gem "haml", "3.1.8"
gem "twitter", :git => "git://github.com/sferik/twitter.git", :tag => "v0.9.12"
gem 'rdoc', '~> 3.9.2'
group :test, :development do
gem "rspec", "1.3.1"
# gem 'rspec-mocks', '2.1.0'
# gem 'rspec-core', '2.1.0'
# gem 'rspec-expectations', '2.1.0'
gem "rspec-rails", "1.3.4"
# gem 'guard'
# gem 'guard-livereload'
# gem 'rb-fsevent', '~> 0.9'
# gem 'em-websocket'
gem 'spork'
end
Here is my spec_helper.rb
require 'rubygems'
require 'spork'
#require 'spork/ext/ruby-debug'
Spork.prefork do
# Loading more in this block will cause your tests to run faster. However,
# if you change any configuration or code from libraries loaded here, you'll
# need to restart spork for it take effect.
# This file is copied to ~/spec when you run 'ruby script/generate rspec'
# from the project root directory.
ENV["RAILS_ENV"] = 'test'
require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
require 'spec/autorun'
require 'spec/rails'
# Uncomment the next line to use webrat's matchers
#require 'webrat/integrations/rspec-rails'
# Requires supporting files with custom matchers and macros, etc,
# in ./support/ and its subdirectories.
Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
Spec::Runner.configure do |config|
# If you're not using ActiveRecord you should remove these
# lines, delete config/database.yml and disable :active_record
# in your config/boot.rb
config.use_transactional_fixtures = true
config.use_instantiated_fixtures = false
config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
# == Fixtures
#
# You can declare fixtures for each example_group like this:
# describe "...." do
# fixtures :table_a, :table_b
#
# Alternatively, if you prefer to declare them only once, you can
# do so right here. Just uncomment the next line and replace the fixture
# names with your fixtures.
#
# config.global_fixtures = :table_a, :table_b
#
# If you declare global fixtures, be aware that they will be declared
# for all of your examples, even those that don't use them.
#
# You can also declare which fixtures to use (for example fixtures for test/fixtures):
#
# config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
#
# == Mock Framework
#
# RSpec uses its own mocking framework by default. If you prefer to
# use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
#
# == Notes
#
# For more information take a look at Spec::Runner::Configuration and Spec::Runner
end
end
Spork.each_run do
# This code will be run each time you run your specs.
end
# --- Instructions ---
# Sort the contents of this file into a Spork.prefork and a Spork.each_run
# block.
#
# The Spork.prefork block is run only once when the spork server is started.
# You typically want to place most of your (slow) initializer code in here, in
# particular, require'ing any 3rd-party gems that you don't normally modify
# during development.
#
# The Spork.each_run block is run each time you run your specs. In case you
# need to load files that tend to change during development, require them here.
# With Rails, your application modules are loaded automatically, so sometimes
# this block can remain empty.
#
# Note: You can modify files loaded *from* the Spork.each_run block without
# restarting the spork server. However, this file itself will not be reloaded,
# so if you change any of the code inside the each_run block, you still need to
# restart the server. In general, if you have non-trivial code in this file,
# it's advisable to move it into a separate file so you can easily edit it
# without restarting spork. (For example, with RSpec, you could move
# non-trivial code into a file spec/support/my_helper.rb, making sure that the
# spec/support/* files are require'd from inside the each_run block.)
#
# Any code that is left outside the two blocks will be run during preforking
# *and* during each_run -- that's probably not what you want.
#
# These instructions should self-destruct in 10 seconds. If they don't, feel
# free to delete them.
Spork starts successfully.
When I run
./script/spec spec
the tests run successfully. However, if I pass the --drb option like so
./script/spec spec --drb
I get
Exception encountered: #<NameError: uninitialized constant RSpec>
had to use gem 'spork', '~> 0.8.0'
I was following a long with this tutorial on how to test rails apps and I came across this error:
/home/***/***/***/spec/spec_helper.rb:27:in `block in <top (required)>': undefined method `use_transactional_fixtures=' for #<RSpec::Core::Configuration:0x9fe8824> (NoMethodError)
My gems are as follows:
gem "rspec-rails", :group => [:test, :development]
group :test do
gem "factory_girl_rails"
gem "capybara"
gem "guard-rspec"
end
and my config file is as follows:
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
# ## Mock Framework
#
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
# config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# If true, the base class of anonymous controllers will be inferred
# automatically. This will be the default behavior in future versions of
# rspec-rails.
config.infer_base_class_for_anonymous_controllers = false
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = "random"
end
so why am I getting this error when ever guard is run?
Might be because you are not using ActiveRecord (e.g you are using MongoId) and if that's the case you need to comment out *config.use_transactional_fixtures* in spec_helper
spec_helper.rb
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
# config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
# config.use_transactional_fixtures = true