【问题标题】:RSpec - undefined local variable or method `user_id' for #<RSpec::Core::ExampleGroupRSpec - #<RSpec::Core::ExampleGroup 的未定义局部变量或方法“user_id”
【发布时间】:2014-01-15 00:21:37
【问题描述】:

我刚开始第 10 章,刚看完图 10.1。

我在 migrate 和 test:prepare 命令之前尝试了 rake db:reset,但没有奏效。

这是我的错误,我在这里找不到类似的:

失败:

1) Micropost 
     Failure/Error: @micropost = Micropost.new(content: "Lorem ipsum", user_id: user_id)
     NameError:
       undefined local variable or method `user_id' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fcfecc789b8>
     # ./spec/models/micropost_spec.rb:9:in `block (2 levels) in <top (required)>'

  2) Micropost 
     Failure/Error: @micropost = Micropost.new(content: "Lorem ipsum", user_id: user_id)
     NameError:
       undefined local variable or method `user_id' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fcfecc8a000>
     # ./spec/models/micropost_spec.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0.00389 seconds
2 examples, 2 failures

Failed examples:

rspec ./spec/models/micropost_spec.rb:15 # Micropost 
rspec ./spec/models/micropost_spec.rb:14 # Micropost 

这是我的代码:

对于文件:db/migrate/[my unique timestamp]_create_microposts.rb

class CreateMicroposts < ActiveRecord::Migration
  def change
    create_table :microposts do |t|
      t.string :content
      t.integer :user_id

      t.timestamps
    end

    add_index :microposts, [:user_id, :created_at]

  end
end

对于文件:spec/models/micropost_spec.rb

require 'spec_helper'

describe Micropost do
  # pending "add some examples to (or delete) #{__FILE__}"

  let(:user) { FactoryGirl.create(:user) }
  before do
    #This code is not correct, idiomatically
   @micropost = Micropost.new(content: "Lorem ipsum", user_id: user_id)
  end

  subject { @micropost }

  it { should respond_to(:content) }
  it { should respond_to(:user_id) }

end

PS 我所有的测试都是绿色的进入 ch。 10

【问题讨论】:

  • 我需要告诉你关于任何问题的标题的重要一点是你不应该这样写,请具体说明你的问题并知道你的问题或导致你问题的原因。 .我看过你的两个帖子,两个帖子的标题相同,可以接受一次,但请记住这一点。
  • 我改进了标题。

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


【解决方案1】:

来自the tutorial的确切代码:

require 'spec_helper'

describe Micropost do

  let(:user) { FactoryGirl.create(:user) }
  before do
    # This code is not idiomatically correct.
    @micropost = Micropost.new(content: "Lorem ipsum", user_id: user.id)
  end

  subject { @micropost }

  it { should respond_to(:content) }
  it { should respond_to(:user_id) }
end

不是user_id: user_id,而是user_id: user.id

【讨论】:

    【解决方案2】:

    也许

       @micropost = Micropost.new(content: "Lorem ipsum", user_id: user_id)
    

    错了吗? user_id(第二次提及,即值)从何而来?

    也许是user.user_idcurrent_user.id

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多