2012-06-24 66 views
0

我不斷收到以下錯誤:回報率教程第6章的愈來愈語法錯誤,意想不到的tIDENTIFIER,期待keyword_end(SyntaxError錯誤

syntax error, unexpected tIDENTIFIER, expecting keyword_end (SyntaxError) 

    from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:245:in `block in load' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:245:in `load' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/configuration.rb:746:in `block in load_spec_files' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/configuration.rb:746:in `map' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/configuration.rb:746:in `load_spec_files' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/command_line.rb:22:in `run' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/runner.rb:69:in `run' 
     from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/runner.rb:10:in `block in autorun' 

這裏是我的user.rb文件:

class User < ActiveRecord::Base 
    attr_accessible :name, :email 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

    validates :name, :presence => true, 
        :length => { :maximum => 50 } 
    validates :email, :presence => true, 
        :format => { :with => email_regex }, 
        :uniqueness => { :case_sensitive => false} 
    end 

    and my user_spec.rb file: 

     require 'spec_helper' 

    describe User do 



before(:each) do 
    @attr = { :name => "Example User", :email => "[email protected]" } 
    end 

    it "should create a new instance given valid attributes" do 
    User.create!(@attr) 
    end 

    it "should require a name" do 
     no_name_user = User.new(@attr.merge(:name => "")) 
     no_name_user.should_not be_valid 
    end 

    it "should require an email address" do 
     no_email_user = User.new(@attr.merge(:email => "")) 
     no_email_user.should_not be_valid 
    end 

    it "should reject names that are too long" do 
      long_name = "a" * 51 
      long_name_user = User.new(@attr.merge(:name => long_name)) 
      long_name_user.should_not be_valid 
    end 

    it "should accept valid email addresses" do 
      addresses = %w[[email protected] [email protected] [email protected]] 
      addresses.each do |address| 
       valid_email_user = User.new(@attr.merge(:email => address)) 
       valid_email_user.should be_valid 
    end 
end 
    it "should reject invalid email addresses" do 
       addresses = %w[[email protected],com user_at_foo.org [email protected]] 
       addresses.each do |address| 
       invalid_email_user = User.new(@attr.merge(:email => address)) 
       invalid_email_user.should_not be_valid 
    end 
end 
    it "should reject duplicate email addresses" do 
    #Put a user with given email address into the database. 
    User.create! (@attr) 
    user_with_duplicate_email = User.new (@attr) 
    user_with_duplicate_email.should_not be_valid 
    end 
end 
    it "should reject email addresses identical up to case" do 
    upcased_email = @attr [:email].upcase 
    User.create! (@attr.merge(:email => upcased_email)) 
    user_with_duplicate_email = User.new (@attr), 
    user_with_duplicate_email.should_not be_valid 
    end 
end 

我米字面上在我的智慧結束..我的測試保持失敗後,我將這部分代碼添加到user_spec.rb文件(在添加和/或刪除代碼我的測試通過這段代碼之前):

it "should reject email addresses identical up to case" do 
    upcased_email = @attr [:email].upcase 
    User.create! (@attr.merge(:email => upcased_email)) 
    user_with_duplicate_email = User.new (@attr), 
    user_with_duplicate_email.should_not be_valid 
    end 
end 

任何幫助非常感謝,謝謝!

回答

1

正上方此行:

it "should reject email addresses identical up to case" do 

你在那裏有一個額外的end聲明。該聲明可能應該移到文件的末尾。在驗證使用Ruby 1.9.3

1

更換:=>

validates :name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, format: { with: VALID_EMAIL_REGEX } 
+0

無需要做到這一點 - Ruby 1.9.3仍然理解舊的'=>'語法。 – nmott

1

你有很多額外的ENDs ...

當您打開do時,如it "should something" do你需要用end關閉打開的do

it "should something" do 
    ... 
end 

但是你關閉它兩次在某些情況下:

it "should something" do 
    ... 
end 
end 

你修改後的代碼應該是:

require 'spec_helper' 

describe User do 
    before(:each) do 
    @attr = { :name => "Example User", :email => "[email protected]" } 
end 

it "should create a new instance given valid attributes" do 
    User.create!(@attr) 
end 

it "should require a name" do 
    no_name_user = User.new(@attr.merge(:name => "")) 
    no_name_user.should_not be_valid 
end 

it "should require an email address" do 
    no_email_user = User.new(@attr.merge(:email => "")) 
    no_email_user.should_not be_valid 
end 

it "should reject names that are too long" do 
    long_name = "a" * 51 
    long_name_user = User.new(@attr.merge(:name => long_name)) 
    long_name_user.should_not be_valid 
end 

it "should accept valid email addresses" do 
    addresses = %w[[email protected] [email protected] [email protected]] 
    addresses.each do |address| 
    valid_email_user = User.new(@attr.merge(:email => address)) 
    valid_email_user.should be_valid 
end 

it "should reject invalid email addresses" do 
    addresses = %w[[email protected],com user_at_foo.org [email protected]] 
    addresses.each do |address| 
    invalid_email_user = User.new(@attr.merge(:email => address)) 
    invalid_email_user.should_not be_valid 
end 
it "should reject duplicate email addresses" do 
    #Put a user with given email address into the database. 
    User.create! (@attr) 
    user_with_duplicate_email = User.new (@attr) 
    user_with_duplicate_email.should_not be_valid 
end 

it "should reject email addresses identical up to case" do 
    upcased_email = @attr [:email].upcase 
    User.create! (@attr.merge(:email => upcased_email)) 
    user_with_duplicate_email = User.new (@attr), 
    user_with_duplicate_email.should_not be_valid 
end 
相關問題