Ruby on Rails教程 - 6.3.1 - 测试未通过

时间:2014-05-26 01:42:12

标签: ruby-on-rails ruby railstutorial.org

根据教程我试图通过测试后,我收到以下错误消息。

Nicolas-Krauses-iMac:sample_app fuzzy_bunnys$ bundle exec rspec spec/
/Users/fuzzy_bunnys/.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/configuration.rb:819:in `load': /Users/fuzzy_bunnys/Documents/rails_one_click/sample_app/spec/models/user_spec.rb:6: syntax error, unexpected '}', expecting => (SyntaxError)
/Users/fuzzy_bunnys/Documents/rails_one_click/sample_app/spec/models/user_spec.rb:62: syntax error, unexpected end-of-input, expecting keyword_end

我在user_spec.rb文件中检查了第6行和第62行,但无法找到任何不匹配的结束关键字或任何不合适的括号。所以我对于发生了什么感到有点失落。 user_spec.rb代码如下。非常感谢任何帮助!

require 'spec_helper'

describe User do

  before do
     @user = User.new(name: "Example User", email: "user@example.com" )
  end

  subject { @user }

  it {should respond_to(:name)}
  it {should respond_to(:email)}
  it {should respond_to(:password_digest)}

  it {should be_valid}

  describe "when name is not present" do
    before {@user.name=" "}
    it {should_not be_valid}
  end

  describe  "when name is too long" do
    before {@user.name="a"*51}
    it {should_not be_valid}
  end

  describe "when email is not present" do
    before {@user.email=" "}
    it {should_not be_valid}
  end

  describe "when email format is invalid" do
    it "should be invalid" do
        addresses = %w[user@foo,com user_at_foo.org example.user@foo. 
                        foo@bar_baz.com foo@bar+baz.com ]
        addresses.each do | invalid_address|
            @user.email = invalid_address
            expect(@user).not_to be_valid
        end
    end
  end

  describe "when email format is valid" do
    it "should be valid" do
        addresses = %w[user@FOO.COM A_US-ER@f.b.org frst.lst@foo.jp a+b@baz.cn]
        addresses.each do |valid_address|
            @user.email = valid_address
            expect(@user).to be_valid
        end
    end
  end

  describe "when email address is already taken" do
    before do
        user_with_same_email = @user.dup
        user_with_same_email.email = @user.email.upcase
        user_with_same_email.save
    end

    it {should_not be_valid}
  end
end 

1 个答案:

答案 0 :(得分:3)

看起来你的ruby --version是< 1.9.3(或者每当引入新的冒号语法时)

要修复,请安装较新的ruby,或将哈希转换为旧样式(name: "Example User"变为:name => "Example User"

证据 - 第6行是哈希(name: "Example User", email: "user@example.com")的行,它期望=>而不是},它可能是下一行中块的结尾。< / p>