2016-04-11 3 views
0

私は過去4時間、私の頭蓋骨を叩いています。フィーチャーテストでカントーsign_in/login_asを作成するcapybara rspec

基本的には、私の機能テストではユーザーとしてログイン/サインインできません。私はdevise_auth_token gemを使用しています。

機能テスト:

1 require 'rails_helper' 
    2  
    3 # TODO: rename unit to features 
    4 feature 'Access' do 
    5 before :each do 
    6  @user = Fabricate :user 
    7  @user.confirm 
    8 
    9  @post = Fabricate :post, user: @user 
10  Fabricate :note, post: @post 
11 end 
12 
13 it 'should show error if not loged in' do 
14  visit api_posts_path 
15  expect(page).to have_content '{"errors":["Authorized users only."]}' 
16 end 
17 
18 it 'should let all user roles view list of posts', format: :js do 
19  login_as @user, scope: :user 
20  visit api_posts_path 
21  binding.pry 

マイスペックヘルパー:

require 'database_cleaner' 
require 'devise' 
require 'auth' 

include Devise::TestHelpers       
include Warden::Test::Helpers 

RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

    config.include Devise::TestHelpers, :type => :controller 
    config.include Warden::Test::Helpers 
    config.before :suite do 
    Warden.test_mode! 
    end 

    config.include AuthHelper 

    # 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://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 

これは、ユーザが許可されていないことを私に与えます。

マイgemfile:あなたは、私がここで最も可能性の高い原因は、あなたがまだで実行している意味している、あなたのspec_helperでconfig.use_transactional_fixtures = falseを持っていないということだと思い抱えている特定のエラーのために

source 'https://rubygems.org' 

gem 'rails', '4.2.6' 
gem 'sqlite3' 
gem 'uglifier', '>= 1.3.0' 
gem 'jbuilder', '~> 2.0' 

group :development, :test do 
    gem 'better_errors' 
    gem 'binding_of_caller' 
    gem 'bullet' 
    gem 'meta_request' 
    gem 'pry-awesome_print' 
    gem 'pry-rails' 
    gem 'quiet_assets' 
    gem 'rspec-rails', '~> 3.0' 
    gem 'rubocop', require: false 
    gem 'fabrication' 
    gem 'database_cleaner' 
    gem 'capybara' 
end 

gem 'devise_token_auth' 
gem 'puma' 
gem 'rack-cors' 
+0

Some1?私は恐怖の中にいます – IvRRimUm

+0

https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-(and-RSpec)あなたはこれをチェックしましたか? –

+0

はい、それはtroughtとtroughtに行ってしまった! – IvRRimUm

答えて

2

テストで作成したすべてのオブジェクトやトランザクションデータベースへのアクセスは、実際にはjs: trueテストではアプリケーションに表示されません。 2番目の問題(この問題の原因ではない)は、後ブロックでWarden.test_reset!を呼び出していないことです。

ここで大きな問題は、Capybaraを使用してAPIをテストしているようです(which Capybara isn't designed for)。おそらく、APIをテストするために要求仕様を使用したいと思うでしょう。

+0

すべてのことを試してみました。 – IvRRimUm

関連する問題