রত্ন পরীক্ষা করার জন্য আরএসপেক সেটআপ করুন (রেলগুলি নয়)


154

রেল অ্যাপ্লিকেশন পরীক্ষার জন্য আরএসপেক সেটআপ করতে আরএসপেক-রেলের যোগ করা জেনারেটরের সাথে এটি বেশ সহজ। তবে কীভাবে উন্নয়নের রত্ন পরীক্ষার জন্য আরএসপেক যুক্ত করবেন? আমি জুয়েলার বা এ জাতীয় সরঞ্জাম ব্যবহার করছি না। আমি bundle gem my_gemনতুন রত্নটির জন্য কাঠামো সেটআপ করতে এবং ব * * জেমসপেক নিজে নিজে সম্পাদনা করতে বান্ডলার ( ) ব্যবহার করেছি । আমিও s.add_development_dependency "rspec", ">= 2.0.0"রত্নপথে যুক্ত হয়ে একটি করেছি bundle install

আরএসপেককে কাজ করার জন্য পাশেই কি কি সুন্দর টিউটোরিয়াল আছে?


আমার মনে হয় আমাকে একটি লিখতে হবে :-) ... কমপক্ষে দুটি রত্ন রয়েছে যা ইতিমধ্যে এটি সুন্দরভাবে সংহত করেছে: অভিনয়-হিসাবে-ট্যাগগিয়েবল-অন এবং অ্যাক্টস_জ_কোডেবল।
জারদোজ

উত্তর:


255

আমি বর্তমানের সেরা অনুশীলনের সাথে মেলে এই উত্তরটি আপডেট করেছি:

বান্ডলার পুরোপুরি রত্ন বিকাশকে সমর্থন করে। যদি আপনি কোনও রত্ন তৈরি করে থাকেন তবে আপনার জেমফাইলে থাকা কেবলমাত্র জিনিসটি নিম্নলিখিত:

source "https://rubygems.org"
gemspec

এই Bundler বলে যখন আপনি চালাতে নির্ভরতা জন্য আপনার gemspec ফাইল ভিতরে দেখুন bundle install

এরপরে, নিশ্চিত হয়ে নিন যে আরএসপেক আপনার মণির বিকাশের নির্ভরতা। জেমস্পেকটি সম্পাদনা করুন যাতে এটি পড়ে:

spec.add_development_dependency "rspec"

এর পরে, তৈরি করুন spec/spec_helper.rbএবং এর মতো কিছু যুক্ত করুন:

require 'bundler/setup'
Bundler.setup

require 'your_gem_name' # and any other gems you need

RSpec.configure do |config|
  # some (optional) config here
end

প্রথম দুটি লাইন বান্ডারকে আপনার রত্নের মধ্যে কেবল রত্নগুলি লোড করতে বলে। আপনি যখন নিজের মেশিনে নিজের মণি ইনস্টল করেন, এটি আপনার চশমাগুলিকে আপনার বর্তমান কোডটি ব্যবহার করতে বাধ্য করবে, আপনি আলাদাভাবে ইনস্টল করা সংস্করণটি নয়।

উদাহরণ হিসাবে উদাহরণস্বরূপ spec/foobar_spec.rb:

require 'spec_helper'
describe Foobar do
  pending "write it"
end

Alচ্ছিক: .rspecডিফল্ট বিকল্পগুলির জন্য একটি ফাইল যুক্ত করুন এবং এটি আপনার মণির মূল পথে রাখুন:

--color
--format documentation

শেষ পর্যন্ত: চশমা চালান:

$ rspec spec/foobar_spec.rb

75
ন্যায়বিচারের জন্য, আপনাকে আরএসপেকের আরআইপি কমান্ডের পরিবর্তে ম্যানুয়ালি টাইপ না করে স্পেক কঙ্কাল ফাইল তৈরি করতে অনুরোধ করা উচিত This এটি আপনার ব্যবহার করা rspec --init
আরএসপেকের

12
rspec --initআমি এটি লেখার সময় উপলব্ধ ছিল না, তবে ভাল কথা!
আইয়াইন

প্রকৃতপক্ষে আমি অনুষঙ্গ সহায়কটিতে প্রয়োজনীয়গুলি করার সর্বোত্তম উপায়টি হ'ল: 'রুবিজেমস'র প্রয়োজন' বান্ডিলার / সেটআপ 'বান্ডিলার রিয়ার্কায়ার (: ডিফল্ট,: উন্নয়ন)
এমকন

@ এমকনের তিনটি লাইন কোডইন আইনের তিনটি লাইনের কোডের থেকে আলাদাভাবে কীভাবে কাজ করবে?
নাকিলন

1
@ এমকন থেকে প্রাপ্ত রেখাগুলির বিকাশ এবং পরীক্ষার গোষ্ঠীতে সমস্ত রত্ন প্রয়োজন হবে, তবে আমার পদ্ধতির প্রতিটি মণি ম্যানুয়ালি প্রয়োজন। যেহেতু রত্নগুলি তৈরি করার সময় আপনার নিজের প্রতিটি রত্নের নিজেকে প্রয়োজন, তাই আমি মনে করি এটি আরও ভাল / পরিষ্কার হওয়া যদিও এটি কিছুটা বেশি কাজ হতে পারে।
আইয়েন

53

আয়ানের সমাধান উপরের কাজটি দুর্দান্ত!

আপনি যদি একটি রেকফিলও চান তবে আপনার যা প্রয়োজন তা এটি:

require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec)

# If you want to make this the default task
task default: :spec

রেকটাস্কের বিভিন্ন বিকল্পের জন্য আরডোক পরীক্ষা করুন যা আপনি কার্যত সংজ্ঞাটিতে যেতে পারেন।


26

আপনি চালিয়ে গিয়ে আরএসপেক দিয়ে আপনার নতুন রত্ন তৈরি করতে পারেন bundler gem --test=rspec my_gem। অতিরিক্ত কোনও সেটআপ নেই!

আমি সবসময় এটি ভুলে যাই এটি এখানে কার্যকর করা হয়েছে: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36


1
ঝরঝরে! তবে আমি মনে করি আপনার রত্নটির নাম উটের মামলার পরিবর্তে আন্ডারস্কোর দিয়ে নির্দিষ্ট করা উচিত। তা না হলে Bundler বড় হাতের অক্ষরে অক্ষরে সঙ্গে ফাইল (Bundler 1.7.4) সৃষ্টি
Malte

বান্ডলার অভিযোগ করেছিলেন --test=rspec, তবে এটি এখনও জিজ্ঞাসা করেছিল যে আমি দৌড়ানোর সময় আমি আরএসপেক ব্যবহার করতে চাই কিনা bundler gem my_gem
নিকোলাস মাটিয়া

7

এখানে একটি সস্তা এবং সহজ (যদিও সরকারীভাবে প্রস্তাবিত নয়) উপায়:

বলা আপনার রত্নের গোড়াতে একটি দির তৈরি করুন spec, সেখানে আপনার চশমা দিন। আপনি সম্ভবত ইতিমধ্যে আরএসপেক ইনস্টল করে রেখেছেন, তবে আপনি যদি তা না করেন তবে কেবল একটি করুন gem install rspecএবং জেমফিলস এবং বান্ডলারটি ভুলে যান।

এরপরে, আপনি একটি বিবরণ তৈরি করবেন এবং আপনার অ্যাপটি কোথায় রয়েছে, আপনার ফাইলগুলি কোথায় রয়েছে তা আপনাকে জানাতে হবে এবং আপনি যে ফাইলটি পরীক্ষা করতে চান তা অন্তর্ভুক্ত করতে হবে (এটির সাথে কোনও নির্ভরতার সাথে):

# spec/awesome_gem/awesome.rb
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
$: << File.join(APP_ROOT, 'lib/awesome_gem') # so rspec knows where your file could be
require 'some_file_in_the_above_dir' # this loads the class you want to test

describe AwesomeGem::Awesome do
  before do
    @dog = AwesomeGem::Awesome.new(name: 'woofer!')
  end
  it 'should have a name' do
    @dog.name.should eq 'woofer!'
  end
  context '#lick_things' do
    it 'should return the dog\'s name in a string' do
      @dog.lick_things.should include 'woofer!:'
    end
  end
end

টার্মিনাল খুলুন এবং আরএসপেক চালান:

~/awesome_gem $ rspec
..

Finished in 0.56 seconds
2 examples, 0 failures

আপনি যদি কিছু .rspecবিকল্প পছন্দ করতে চান তবে একটি .rspecফাইল তৈরি করুন এবং এটি আপনার মণির মূল পথে রাখুন। আমার এইরকম দেখাচ্ছে:

# .rspec
--format documentation --color --debug --fail-fast

সহজ, দ্রুত, ঝরঝরে!

আমি এটি পছন্দ করি কারণ আপনার প্রকল্পে আপনার কোনও নির্ভরতা যুক্ত করতে হবে না এবং পুরো জিনিসটি খুব দ্রুত থেকে যায়। bundle execজিনিসগুলি কিছুটা কমিয়ে দেয়, আপনি যা করতে পারেন তা নিশ্চিত করার জন্য আপনি আরএসপিএকের একই সংস্করণটি সর্বদা ব্যবহার করছেন। আমার কম্পিউটারে আরএসপিসি আপ লোড করার সময়টি যেটি 0.56 সেকেন্ডে শুরু হয়েছিল তা ৯৯% ছিল। কয়েকশ চশমা চালানো অত্যন্ত দ্রুত হওয়া উচিত। আমি যে বিষয়টি সম্পর্কে সচেতন রয়েছি তার মধ্যে কেবল আপনিই সচেতন হতে পারেন আপনি যদি আরএসপেকের সংস্করণগুলি পরিবর্তন করেন এবং নতুন সংস্করণটি আপনি যদি আপনার পরীক্ষায় ব্যবহৃত কোনও ফাংশনের সাথে পিছনে সামঞ্জস্য না করেন তবে আপনাকে কিছু পরীক্ষা আবার লিখতে হতে পারে।

এটি দুর্দান্ত যদি আপনি এক-অফ চশমা করছেন বা আপনার রত্নখণ্ডায় আরএসপিকে অন্তর্ভুক্ত না করার কিছু ভাল কারণ আছে তবে এটি ভাগ করে নেওয়া বা সামঞ্জস্যতা কার্যকর করার পক্ষে খুব ভাল নয়।


আধ্যাত্মিক গেম না দেওয়ার কী উপায় আছে :: ক্লাসের নামগুলির আগে আপনি যখন কোনও পরীক্ষার অবজেক্টটি উল্লেখ করেন তখন? অথবা আপনি যখন নিজের উদাহরণের মতো একটি নতুন পরীক্ষা তৈরি করেন।
মিশা স্লিউসারেভ

1
অবশ্যই, আপনি নিজের শ্রেণির নামটি আরও ছোট Thing = AwesomeGem::Awesomemodule AwesomeGem; it 'stuff' do; Awesome.new ... end; end
আকারের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.