2015-03-05 6 views
12

मेरे पास एक ऐप है जो चश्मा चलाता है केवल rake के साथ, लेकिन यह नहीं पता कि यह कार्य कहां या कैसे परिभाषित किया गया है। Lib/कार्यों में कोई कार्य नहीं है। Gemfile कीडिफ़ॉल्ट रेक कार्य रेल ऐप में चश्मा क्यों चलाता है?

भाग:

group :test do 
    gem 'capybara' 
    gem 'guard-rspec' 
    gem 'rspec-rails' 
    gem 'database_cleaner' 
    gem 'launchy' 
    gem 'oauth2' 
    gem 'rack_session_access' 
    gem 'factory_girl' 
    gem 'webmock' 
    gem 'selenium-webdriver' 
end 

RSpec जवाहरात:

guard-rspec (4.5.0) 
rspec (3.1.0) 
rspec-core (3.1.7) 
rspec-expectations (3.1.2) 
rspec-mocks (3.1.3) 
rspec-rails (3.1.0) 
rspec-support (3.1.2) 

मैं रैक 10.4.2 और रेल 4.1.6 का उपयोग कर रहा हूँ।

इसके अलावा

, जब मैं जोड़ें: "। कोई डिफ़ॉल्ट कार्य"

task :default do 
    puts 'No default task.' 
end 
Rakefile को

, पहले यह चश्मा चलाता है, और फिर प्रिंट

जोड़ें: Rakefile

# Add your own tasks in files placed in lib/tasks ending in .rake, 
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 

require File.expand_path('../config/application', __FILE__) 

Rails.application.load_tasks 
+0

[रेलवे के डिफ़ॉल्ट रेक कार्यों को ओवरराइड करने के संभावित डुप्लिकेट] (http://stackoverflow.com/questions/8112074/overriding-rails-default-rake-tasks) –

+0

ऐसा लगता है कि यह 'spec' जोड़कर rspec-rails हो सकता है डिफ़ॉल्ट कार्य की निर्भरता के रूप में: https://github.com/rspec/rspec-rails/blob/6d1b893b936e6651fbb96771fefdefff8a7627fe/lib/rspec/rails/tasks/rspec.rake#L6 – matt

उत्तर

22

आप अपने Gemfile में rspec-rails है, तो जब मणि रेल द्वारा भरी हुई है इस लाइन पर अमल होगा:

https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec-rails.rb#L19

load "rspec/rails/tasks/rspec.rake" 

जो बदले में डिफ़ॉल्ट रेक कार्य को परिभाषित करता है:

https://github.com/rspec/rspec-rails/blob/v3.2.1/lib/rspec/rails/tasks/rspec.rake#L6

task :default => :spec 

इसलिए डिफ़ॉल्ट रेक कार्य अपने रेल app में चश्मा चलाता है।

इसके अलावा, जब आप इस कोड को कहा: यह बढाती है:

task :default do 
    puts 'No default task.' 
end 

कि वास्तव में डिफ़ॉल्ट कार्य नहीं फिर से परिभाषित करता है। जिस तरह से रेक कार्य परिभाषा काम करती है, उसी कार्य नाम की प्रत्येक घोषणा उस कार्य को जोड़ती है। यह इसे फिर से परिभाषित नहीं करता है। इसलिए परिणामस्वरूप आप "कोई डिफ़ॉल्ट कार्य नहीं" और चश्मे चलाए जाते हैं।

+0

ठीक है, यह समझ में आता है। लेकिन मेरे पास एक और रेल ऐप में एक ही मणि है और 'रेक छोड़ दिया गया है! पता नहीं कि कार्य 'डिफ़ॉल्ट' कैसे बनाएं। मुझे आश्चर्य है कि यह पता लगाने के लिए कि क्यों रेक रेक नहीं है। –

+0

@BSeven I रेलवे ऐप के जेमफाइल और रेकैकाइल के साथ इसके लिए एक अलग प्रश्न खोलने का सुझाव देता है जिसमें 'कार्य को परिभाषित करने के तरीके को' डिफ़ॉल्ट 'समस्या नहीं है। –

संबंधित मुद्दे