2013-04-23 4 views
30

मैं जेएस परीक्षण प्रदान करने के लिए अपने रेल-कोणीय परियोजना को स्थापित करने की कोशिश कर रहा हूं। मैं लगभग सब कुछ मैं गूगल में क्या पाया है की कोशिश की है:जेएस का परीक्षण करने के लिए रेल-कोणीय परियोजना कैसे स्थापित करें?

लेकिन मैं सभी के साथ विफल उनमें से। मैं सबसे दर्द रहित तरीके से इकाई और ई 2 परीक्षण चलाने के लिए रास्ता तलाश रहा हूं (यह गार्ड या कर्म में हो सकता है, मुझे परवाह नहीं है, लेकिन इसे पृष्ठभूमि में स्वचालित रूप से इसे चलाया जाना चाहिए)।

क्या आप में से कोई भी अच्छा उदाहरण है कि इसे कैसे प्राप्त किया जाए? मेरे शोध में मुझे this मिला है, लेकिन आईएमएचओ यह उदाहरण है कि यह कैसे नहीं किया जाए।

मेरे वास्तविक Gemfile:

source 'https://rubygems.org' 

# Use Ruby 1.9.3 instead default Heroku's 1.9.2 
# for development I suggest https://gist.github.com/1688857 
ruby '1.9.3' 

gem 'rails', '3.2.12' 

# Use PostgreSQL, which is quite awesome, fast and easy 
gem 'pg' 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.2.3' 
    gem 'bootstrap-sass', '~> 2.3.1' 

    # I heard that you like Compass 
    gem 'compass' 

    # Angular.js 
    gem 'angularjs-rails' 
    gem 'angularjs-rails-resource' 
    gem 'angular-ui-rails' 

    # Assets should be minified before production 
    gem 'uglifier', '>= 1.0.3' 
end 

gem 'jquery-rails' 

# Serve static pages like a boss 
gem 'high_voltage' 

# Some user management will be nice 
gem 'devise' # User management 
# gem 'cancan' # And they privileges 

# To use Jbuilder templates for JSON 
gem 'jbuilder' 

# Be fast and deadly as Puma 
#gem 'puma' 

# We need also some administration panel, don't we? 
gem 'rails_admin' 

# Some helpers 
gem 'andand' 

group :development do 
    # IRb is ugly. Use Pry for the God's sake 
    gem 'pry-rails' 

    # Deploy with Capistrano 
    # gem 'capistrano' 
    # or Vlad the Deployer 
    # gem 'vlad' 

    # Why bother yourself with rerunning tests? Use Guard 
    gem 'guard' 
    gem 'guard-rspec' 
    gem 'guard-spork' 
    gem 'guard-livereload' 
    gem 'guard-jasmine' 
    gem 'rb-fsevent', require: false 
    gem 'rb-inotify', require: false 

    # Who like ugly error pages? We don't. 
    gem 'better_errors' 
    gem 'binding_of_caller' 

    # Prettier documentation 
    gem 'yard' 
end 

group :development, :test do 
    # Use RSpec for testing 
    gem 'rspec-rails', '~> 2.12.0' 

    # Test JS using Jasmine 
    gem 'jasmine' 
    gem 'jasmine-headless-webkit' 

    # Some DB table generator 
    gem 'factory_girl_rails', '~> 4.1.0' 

    # And fake data generator 
    gem 'ffaker' 
end 

group :test do 
    # Some Gherkins will be also good (to vodka of course) 
    gem 'turnip', '~> 1.1.0' 

    # Aww, an of course some web browser will be also apprised 
    gem 'capybara', '~> 2.0.1' 

    # Clean DB after tests 
    gem 'database_cleaner' 

    # Some nice matchers 
    gem 'shoulda-matchers' 

    # Extend your mocks 
    gem 'bourne', '~> 1.2.1' 

    # Coverage reports will be nice 
    gem 'simplecov', require: false 
end 

पुनश्च: यह अच्छा होगा अगर मैं सरल तरीके से कवरेज रिपोर्ट बना सकते हैं होगा।

+0

"लेकिन इसे पृष्ठभूमि में स्वचालित रूप से इसे चलाया जाना चाहिए" - हमने टेस्ट धावक बनाए जो हमारे कोणीय परियोजना के लिए 'ग्रंट' से भाग गए और इन्हें सीआई (जैसे जेनकींस) के लिए कवरेज रिपोर्ट और एक्सयूनीट आउटपुट बनाया गया; तो क्या इससे कोई फर्क पड़ता है कि आपको इन परीक्षणों को 'जेमफाइल' से चलाना है या आप मिश्रण में कुछ 'नोडजेस' फेंक सकते हैं? –

+0

गार्ड के साथ इसे एकीकृत करने के लिए इसे 'जेमफाइल' में रखना अच्छा लगेगा, लेकिन मुझे इसके लिए मजबूर नहीं किया गया है। हो सकता है कि यह बेहतर होगा अगर मैं बैकएंड परीक्षणों से फ्रंटेंड परीक्षण अलग करता हूं। तो ग्रंट/कर्म विकल्प भी अच्छा है। लेकिन मैं 'spec/'निर्देशिका में सभी परीक्षण भी करना चाहता हूं (यदि यह संभव है)। – Hauleth

+1

मैं इस सप्ताह के अंत में https://github.com/modeset/teaspoon को आजमा रहा हूं, यह आपको बताएगा कि यह कैसा चल रहा है। – darethas

उत्तर

6

आप teaspoon का उपयोग कर सकते हैं, यह आपके पसंदीदा परीक्षण सूट (डिफ़ॉल्ट जैस्मीन) चलाता है और उनके पास कोणीय के साथ एकीकृत करने के लिए विकी है। चम्मच संपत्ति पाइपलाइन के साथ एकीकृत करता है, ताकि आप वहां सभी कोणीय रत्न फेंक सकें और उन्हें spec_helper.js उत्पन्न चम्मच में आवश्यकता हो।

अन्य अच्छी बात यह है कि उनके पास एक गार्ड प्लगइन भी उपलब्ध है।

0

आपके पास angular boilerplate project की जांच करने में कुछ भाग्य हो सकता है, यह निर्माण प्रणाली के रूप में गड़बड़ी का उपयोग करता है जिसे मैं महसूस करता हूं कि किसी भी तरह से रूबी नहीं है, हालांकि मुझे लगता है कि कोणीय के साथ चीजों का परीक्षण करने की कोशिश करते समय आपकी एकमात्र आशा नोडज/कर्म मार्ग पर जाना है ।

यह सेटअप आपके कोड में परिवर्तन के लिए देखता है और परीक्षण चलाता है। हालांकि मेरे सीमित अनुभव में मैं परीक्षण चलाने के परिणामों को दिखाने में सक्षम नहीं हूं। मुझे यकीन नहीं है कि मैं कुछ गलत कर रहा हूं या यदि यह समर्थित नहीं है।

वैसे भी उम्मीद है कि इस मदद करता है

6

मैं अपने दर्द महसूस, यह मेरे सभी परीक्षणों मेरी रेल अनुप्रयोग के लिए चलाने के लिए परीक्षण और त्रुटि का एक सा ले लिया। मैं चश्मा, स्वीकृति, और जावास्क्रिप्ट के लिए डेवलपर निरंतर परीक्षण के लिए गार्ड का उपयोग कर समाप्त हुआ। मेरे श्रम के फल यहाँ हैं।

यह Gemfile स्निपेट आपको शामिल करने की आवश्यकता होगी। इसमें Guard, Jasmine, Rspec, और Turnip के लिए आवश्यक रत्न हैं। यह सेटअप एमआरआई और जेआरबी के साथ काम करेगा, हम दोनों पर हमारे परीक्षण चलाते हैं।

group :test, :development do 
    # Guard 
    gem 'guard-jasmine' 
    gem "guard-bundler", ">= 1.0.0" 
    gem "guard-rails", ">= 0.4.0" 
    gem "guard-rspec", ">= 2.5.2" 
    gem "rb-inotify", ">= 0.9.0", :require => false 
    gem "rb-fsevent", ">= 0.9.3", :require => false 
    gem "rb-fchange", ">= 0.0.6", :require => false 

    # Rspec 
    gem "rspec-rails", '~> 2.12.2' 

    # Jasmine 
    gem "jasmine", '~> 1.3.1' 
    gem "jasminerice" 
end 

group :test do 
    # Turnip 
    gem "turnip", '~> 1.1.0' 
    gem "capybara", '~> 2.0.3' 
end 

यह पूर्ण Guardfile कि Rspec, शलजम, और जैस्मीन देखता परीक्षण को गति प्रदान करने:

guard 'rspec' do 
    watch(%r{^spec/.+_spec\.rb$}) 
    watch(%r{^lib/(.+)\.rb$})  { |m| "spec/lib/#{m[1]}_spec.rb" } 
    watch('spec/spec_helper.rb') { "spec" } 

    # Rails 
    watch(%r{^app/(.+)\.rb$})       { |m| "spec/#{m[1]}_spec.rb" } 
    watch(%r{^app/(.*)(\.erb|\.haml)$})     { |m| "spec/#{m[1]}#{m[2]}_spec.rb" } 
    watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] } 
    watch(%r{^spec/support/(.+)\.rb$})     { "spec" } 
    watch('config/routes.rb')       { "spec/routing" } 
    watch('app/controllers/application_controller.rb') { "spec/controllers" } 

    # Turnip features and steps 
    watch(%r{^spec/acceptance/(.+)\.feature$}) 
    watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' } 
end 

guard :jasmine do 
    watch(%r{spec/javascripts/spec\.(js\.coffee|js|coffee)$}) { 'spec/javascripts' } 
    watch(%r{spec/javascripts/.+_spec\.(js\.coffee|js|coffee)$}) 
    watch(%r{spec/javascripts/fixtures/.+$}) 
    watch(%r{app/assets/javascripts/(.+?)\.(js\.coffee|js|coffee)(?:\.\w+)*$}) { |m| "spec/javascripts/#{ m[1] }_spec.#{ m[2] }" } 
end 

अब चीजें कुछ मुश्किल हो। परीक्षण के लिए AngularJS को ठीक से लोड करने के लिए जैस्मीन प्राप्त करने के लिए मैंने निर्देशिका spec/javascripts/support/angular-mocks.js पर डाउनलोड किया। इसका उपयोग एंगुलजरजेएस चश्मा चलाने के लिए स्पेस हेल्पर और जैस्मीन कॉन्फ़िगरेशन द्वारा किया जाता है।

spec/javascripts/spec_helper.js.coffee के लिए, इसे रेल ऐप जावास्क्रिप्ट, कोणीय-मैक्स पर इंगित करें।जे एस, और सभी जावास्क्रिप्ट चश्मा:

#=require ../../app/assets/javascripts/application 
#=require ./support/angular-mocks 
#=require_tree ./ 

जैस्मीन config के लिए, कल्पना/javascripts/support/jasmine.yml, config रेल एप्लिकेशन पर बात करने के लिए की आवश्यकता होगी जावास्क्रिप्ट और कोणीय-mocks.js । यहाँ हम इस्तेमाल होता है, लेकिन संक्षिप्तता के लिए निकाली गई टिप्पणियां साथ:

src_files: 
    - assets/application.js 
    - spec/javascripts/support/angular-mocks.js 

stylesheets: 
    - stylesheets/**/*.css 

helpers: 
    - helpers/**/*.js 

spec_files: 
    - '**/*[sS]pec.js' 

src_dir: 

spec_dir: spec/javascripts 

सब कुछ सेट के साथ, आप बस bundle exec guard चलाने के लिए है और सभी परीक्षण चलाता है, और विकास में परिवर्तन द्वारा ट्रिगर किया जा।

2

मैंने डिफॉल्ट जैस्मीन मणि का उपयोग करके रेल ऐप पर एंगुलरजेएस यूनिट परीक्षण स्थापित करने के लिए एक बहुत ही सरल तरीका के बारे में एक ब्लॉग पोस्ट लिखा है। चीजों को आसानी से काम करने के लिए इसमें एक छोटा कोड परिवर्तन हुआ, जिसे जैस्मीन टीम ने स्वीकार कर लिया है।

http://pivotallabs.com/unit-testing-angularjs-using-jasmine/

एक संक्षेप में:

अपने Gemfile को चमेली और AngularJS-रेल जोड़े

gem "angularjs-rails" 
gem "jasmine", github: "pivotal/jasmine-gem" 

स्थापित जवाहरात और जैस्मीन जनरेटर चलाने

$ bundle install 
$ rails g jasmine:install 

कोणीय जोड़े आपके आवेदन के बाकी हिस्सों से पहले, अपने आवेदन.जेएस पर आयन कोड

//= require angular 
//= require_tree . 

./spec/javascripts/helpers/angular_helpers.js नाम की एक फ़ाइल बनाएँ और अब आप अपने app/assets निर्देशिका में AngularJS कार्यान्वयन फ़ाइलों में शामिल हैं और परीक्षण है कि प्रदान की mocks का उपयोग लिख सकते हैं इस लाइन

//= require angular-mocks 

जोड़ें। और जब आप angularjs-rails मणि को अपग्रेड करते हैं, तो आपको एक ही समय में angular.js और angular-mocks.js के नए संस्करण मिलेंगे।

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