[英]RoR Tutorial Chapter 6 keep getting syntax error, unexpected tIDENTIFIER, expecting keyword_end (SyntaxError
I keep getting the following error: 我不断收到以下错误:
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'
here is my user.rb file: 这是我的user.rb文件:
class User < ActiveRecord::Base
attr_accessible :name, :email
email_regex = /\A[\w+\-.]+@[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 => "user@example.com" }
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[user@foo.com THE_USER@foo.bar.org first.last@foo.jp]
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[user@foo,com user_at_foo.org example.user@foo.]
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
I'm literally at my wits end..My test keeps failing after I add this part of code to the user_spec.rb file (before adding and/or deleting this section of code my tests pass): 我实际上是机智的。在将这部分代码添加到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
Any help is greatly appreciated, thanks!! 任何帮助,不胜感激,谢谢!
Directly above this line: 在这条线的正上方:
it "should reject email addresses identical up to case" do
You have an extra end
statement in there. 您在那里有一个额外的end
声明。 That statement should probably be moved to the end of the file. 该语句可能应该移到文件末尾。
you using ruby 1.9.3 您使用Ruby 1.9.3
in your validation replace: => with : 在您的验证中: =>替换为:
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }
You have many extra ENDs
... 您还有许多额外的ENDs
...
When you open a do
, like it "should something" do
you need to close the open do
with an end
: 当您打开一个do
,就像it "should something" do
您需要以一个end
来关闭open do
:
it "should something" do
...
end
However you are closing it twice in some cases: 但是,在某些情况下,您将其关闭两次:
it "should something" do
...
end
end
Your revised code should be: 您修改后的代码应为:
require 'spec_helper'
describe User do
before(:each) do
@attr = { :name => "Example User", :email => "user@example.com" }
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[user@foo.com THE_USER@foo.bar.org first.last@foo.jp]
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[user@foo,com user_at_foo.org example.user@foo.]
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.