রেলগুলিতে আরএসপেক এবং ক্যাপিবারা ব্যবহার করার সময় অপরিজ্ঞাত পদ্ধতি 'ভিজিট' করে


90

আরএসপিপিতে কাজ করা ক্যাপিবারা পাচ্ছি না এটি আমাকে এই ত্রুটি দেয়:

undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>

আমি জানি যে এ সম্পর্কে প্রচুর পোস্ট রয়েছে তবে সমাধানগুলির মধ্যে এটি আমার পক্ষে কাজ করছে না। তাদের মধ্যে বেশিরভাগই চশমাগুলিকে / অনুমান / বৈশিষ্ট্যগুলিতে অন্তর্ভুক্ত করে না - যা খনিতে রয়েছে।

প্রথম ত্রুটি:

$bundle exec rspec spec
F

Failures:

  1) security signs users in
     Failure/Error: visit "/sessions/new"
     NoMethodError:
       undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
     # ./spec/features/security_spec.rb:4:in `(root)'

 Finished in 0.006 seconds
 1 example, 1 failure

Failed examples:

rspec ./spec/features/security_spec.rb:3 # security signs users in

আমি মনে করি এটি জরুরী যে আমি প্রথমে ইউআরএল হেল্পার 'new_sessions_path' ব্যবহার করেছি এবং এটি আমাকে একটি ত্রুটি দেয় undefined local variable or method 'new_sessions_path'। আমি জানি এটি বৈধ কারণ:

$ rake routes
logout_sessions GET    /sessions/logout(.:format) sessions#logout
       sessions POST   /sessions(.:format)        sessions#create
   new_sessions GET    /sessions/new(.:format)    sessions#new
      contracts POST   /contracts(.:format)       contracts#create
  new_contracts GET    /contracts/new(.:format)   contracts#new
 edit_contracts GET    /contracts/edit(.:format)  contracts#edit
                GET    /contracts(.:format)       contracts#show
                PUT    /contracts(.:format)       contracts#update
                DELETE /contracts(.:format)       contracts#destroy
           root        /                          contracts#index

আমার রত্ন:

source 'https://rubygems.org'

gem 'rails', '3.2.11'
gem 'execjs'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'activerecord-oracle_enhanced-adapter', '~> 1.4.1'
gem 'jruby-openssl'
gem 'therubyrhino'
gem 'kaminari'
gem 'nokogiri'

group :development do
  gem 'warbler'
end

group :test do
  gem 'rspec-rails'
  gem 'capybara'
  gem 'activerecord-jdbcsqlite3-adapter'
end

my_app / spec এর ভিতরে spec_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__)
require 'rspec/rails'
require 'rspec/autorun'

# Capybara integration
require 'capybara/rspec'
require 'capybara/rails'

# 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|
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  # config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
  # Include path helpers
  config.include Rails.application.routes.url_helpers
end

my_app / spec / বৈশিষ্ট্য / সুরক্ষা_spec.rb:

describe "security", :type => :feature do
  it "signs users in" do
    visit "/sessions/new"
    fill_in "username", :with => "user"
    fill_in "password", :with => "pass"
    click_button "Sign In"

    page.should have_content('Login Successful')
  end
end

আমি পরীক্ষার উপরে এবং বাইরে উভয়ই উপরে নির্ধারণ করার চেষ্টা করেছি :type => :feature। এটি কোনওভাবেই কোনও পার্থক্য তৈরি করে না। আমার কি পরবর্তী ধারণা করা উচিত?



4
প্রথম অনুচ্ছেদে @ এমল্ট আমি বলেছিলাম: "আমি জানি এটি সম্পর্কে প্রচুর পোস্ট রয়েছে তবে সমাধানগুলির জন্য আমার পক্ষে কাজ করা হচ্ছে না। তাদের বেশিরভাগের মধ্যে চশমা / স্পেক / বৈশিষ্ট্যগুলি নেই - যা খনিতে রয়েছে তা জড়িত।" এই অনুচ্ছেদটি আপনার সাথে লিঙ্কিত প্রশ্নটি বিশেষভাবে উল্লেখ করছে। এই প্রশ্নের কেবল উচ্চতর ভোটই নয়, এটি একটি সমাধানও নিয়ে আসে - যা আপনার লিঙ্কিত প্রশ্নে পোস্ট করা সর্বাধিক ভোট দেওয়া উত্তর (সমাধান নয়) থেকে আলাদা।
লাইটউইচ05

উত্তর:


203

যুক্ত করার চেষ্টা করুন:

  config.include Capybara::DSL

আপনার কনফিগারেশন ব্লক।

# 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'

# 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|
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  # config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
  # Include path helpers
  config.include Rails.application.routes.url_helpers

  config.include Capybara::DSL

end

না, ঠিক একই সমস্যা, আপাত কোনও পরিবর্তন নেই
আলোকসজ্জা ০৫

9
এটি আমার পক্ষে কাজ করেছে - ধন্যবাদ একটি টন। আমার অন্যান্য প্রকল্পগুলিতে যদিও এটি করার দরকার নেই। কোন প্রকল্পে এই প্রকল্পটি প্রয়োজনীয় হবে, তবে অন্য নয়? এছাড়াও, এই ঠিক কি করছে?
পিটার বার্গ

4
আমার জন্যও কাজ করেছেন। আপনাকে অনেক ধন্যবাদ!
মারিয়ান জাগোরুইইকো

আমার ফাইলটিতে ইতিমধ্যে 'স্পেস_হেল্পার' প্রয়োজনীয় ছিল যা এই সমস্যার উত্তরটি যাচাই করে নেওয়া হয়েছিল, তবে এটি আমার পক্ষে কাজ করেছে। ধন্যবাদ!
ষাট

এটি আমার পক্ষে কাজ করে না: আমি একটি ত্রুটি বার্তা পাই Capybaraযা একটি অনির্ধারিত ধ্রুবক। আমার শসা টেস্টে ক্যাপিবারা ব্যবহার করা হচ্ছে ঠিক আছে।
ডিজিটিগ

53

যোগ করার পদ্ধতি require 'rails_helper'আমার বৈশিষ্ট্য উপরের আমার সমস্যা ফিক্সিং শেষ পর্যন্ত:

require 'rails_helper'

describe "security", :type => :feature do

  it "signs users in" do
    visit new_sessions_path
    fill_in "username", :with => "user"
    fill_in "password", :with => "pass"
    click_button "Sign In"

    page.should have_content('Login Successful')
  end
end

এটি আমার কাছে অদ্ভুত বলে মনে হয় যেহেতু আমি আরএসপেক এবং ক্যাপিবার জন্য দেখেছি প্রতিটি উদাহরণের প্রয়োজন নেই, তবে ওহ ভাল। সমস্যা সমাধান.

আসল উত্তর (আরএসপিএকের পুরানো সংস্করণ)

require 'spec_helper'আরএসপেকের পুরানো সংস্করণ ব্যবহার করে। আরও ভাল উত্তর হবে require 'rails_helper'


4
আপনার আপডেটের অংশটি আপনার পোস্টের শীর্ষে রাখা উচিত।
নিস্তওয়ান

নিজের উত্তরগুলি গ্রহণ করা সত্যিই খারাপ পদ্ধতি, যদিও কোকুর 4 ডি এর উত্তর আরও সুনির্দিষ্ট (এবং রেল_হেল্পার.আরবি অন্তর্ভুক্ত করতে ভুলে যাওয়া আরও সাধারণ সমস্যা হবে না)। আপনার গ্রহণযোগ্য উত্তরটি পরিবর্তন করা উচিত, যেমন এটি অন্তর্ভুক্ত করার আগে কনফিগারেশন পরিবর্তন না করেই আপনার ত্রুটি থাকবে।
র্যান্ডমিন

36

যেহেতু ক্যাপাইবার ২.০ টি ফোল্ডার স্পেস / বৈশিষ্ট্যগুলি ব্যবহার করতে হবে ক্যাপিবারা কমান্ডগুলি ফোল্ডার বিশেষে / অনুরোধগুলিতে আর কাজ করে না।


4
আমার প্রশ্ন যুক্তরাষ্ট্রের মতো, আমার Capybara পরীক্ষা ছিল ইতিমধ্যে অধীনে অবস্থিত spec/features। তবে অন্যান্য সমস্যাগুলির ক্ষেত্রে এটি বৈধ পয়েন্ট।
লাইটউইচ05

ডিরেক্টরিটি তৈরি করতে mkdir spec/featuresএবং প্রতীকী লিঙ্কটি তৈরি করা আমার পক্ষে সহায়ক বলে মনে হচ্ছে ln -s spec/features spec/requests। এইভাবে যে কোনও উত্পন্ন পরীক্ষাগুলি বৈশিষ্ট্য ডিরেক্টরিতে স্থাপন করা হবে।
omarshammas

ধন্যবাদ @ তিল্লাইনারায়ণন, পুরানো সেটআপ গাইড অনুসরণ করে এটি আমার সমস্যা ছিল তবে আরও সাম্প্রতিক ক্যাপিবারা সংস্করণে
ভেগা স্টুডিওগুলি

5

আপনার সমস্ত সেটআপ একটি beforeব্লকে করার চেষ্টা করুন :

বৈশিষ্ট / বৈশিষ্ট্য / সুরক্ষা_স্পেক.আরবি

describe "security" do
  before do
    visit "/sessions/new"
    fill_in "username", :with => "user"
    fill_in "password", :with => "pass"
    click_button "Sign In"
  end

  it "signs users in" do
    page.should have_content('Login Successful')
  end
end

4
এটি আসলে ত্রুটির একটি সাধারণ কারণvisitফাংশন একটি মধ্যে কেবল প্রাপ্তিসাধ্য itব্লক। উত্স
লাইটউইচ05

4
সত্য নয় - একটি beforeব্লকের কোড উদাহরণ প্রসঙ্গে চালিত হয়, সুতরাং visitসেখানে পাশাপাশি একটি itব্লকেও কাজ করবে ।
জেটেটিক

4
@ ব্যবহারকারী912563, শেষ পর্যন্ত, যেহেতু আপনি আপনার নিজের সমস্যার সমাধান করেছেন, আমার উত্তরটি অন্য যে কোনও কিছুর চেয়ে সত্যিই একটি স্টাইলের পরামর্শে পরিণত হয়েছে ( beforeব্লকের কোড সেটআপ করা হল আমি কীভাবে আমার চশমা লিখি, এবং তারা ত্রুটি ছাড়াই কাজ করে ;-)), তাই আমার মনে হয় আপনার নিজের উত্তরটি গ্রহণ করা ঠিক।
পল ফিওরাভন্তি

ধন্যবাদ @ জেটিটিক এবং @ পল-ফিরাভন্তী - আমি জানতাম না যে beforeএখনও itপ্রসঙ্গে রয়েছি । এটি ব্যবহার করে আমার অন্যান্য পরীক্ষাগুলি তৈরি হবে যা লগইন করা অনেক বেশি ক্লিনার
লাইটউইচ05

এটি আমাকে সহায়তা করেছিল কারণ আমি নুব এবং এটিতে "শেষ" না করে পরীক্ষাটি গুটিয়ে রাখা হয়নি।
ড্যানি

3

আমারও এই সমস্যা ছিল,

আমার বৈশিষ্ট্যের শীর্ষে 'Rails_helper' যুক্ত করা আমার সমস্যার সমাধান শেষ করেছে:

require 'rails_helper'

RSpec.describe "Products", type: :request do
 describe "GET /products" do
 it "display tasks" do
  Product.create!(:name => "samsung")
  visit products_path
  page.should have_content("samsung")
  #expect(response).to have_http_status(200)
  end
 end
end

এবং Rails_helper.rb- এ 'config.incolve Capybara :: DSL' যুক্ত করুন

RSpec.configure do |config|

 config.fixture_path = "#{::Rails.root}/spec/fixtures"

 config.use_transactional_fixtures = true

 config.infer_spec_type_from_file_location!

 config.include Capybara::DSL

end

কনফিগার লাইনটি যুক্ত করা আমার পক্ষে কাজ করেছিল। এটি আশ্চর্যজনক কারণ আমি আমার স্পেক ফাইলগুলির মধ্যে একটিতে ত্রুটি পেয়েছি কিন্তু অন্য কোনও স্পাই ফাইলটিতে নয়, এবং উভয়ই একই ক্যাপি পদ্ধতিগুলি (এবং উভয় প্রয়োজনীয় রেল_হেল্পার) ডাকে
জোনাথন তুজ্জামান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.