4

ここに私のrspecコードがあります:

describe User do
  before{(@user=User.new(username:"abcdefg",email:"123456@123.com",password:"123456")}
  subject(@user)
  @user.save
end

そして、私はそのようなエラーを受け取りました:undefined method 'save' for nil:NilClass(NoMethodError)

Railsコンソールで同じコードを書き込もうとしましたが、うまくいきました。しかし、Rspecに関しては、失敗し、理由を見つけることができません...

誰でもそれを手伝ってもらえますか?

4

2 に答える 2

7

ここにRspecの方法があります:

describe User do
  let(:valid_user) { User.new(username:"abcdefg",email:"123456@123.com",password:"123456") }

  it "can be saved" do
    expect(valid_user.save).to be_true
  end
end

スペックではデータベース操作を避けるべきであることに注意してください。

もう 1 つのポイントとして、ファクトリを使用してスペックをクリーンアップすることを検討してください。

于 2013-04-03T07:42:25.043 に答える
5

ブロックitのコンテキストでは が定義されていないため、サンプル ブロックでコードをラップする (つまり、ブロックでメソッドを呼び出す) 必要があります。例えば:describe@user

describe User do
  before{(@user=User.new(username:"abcdefg",email:"123456@123.com",password:"123456")}
  subject(@user)

  it "can be saved" do
    @user.should respond_to(:save)
    @user.save.should_not be_false
  end
end

編集:あなたが持っていることにも気付きsubject(@user)ましたが、適切に設定するにはブロックが必要になる場合があります。以下は全体的にきれいです。

describe User do
  let(:user) { User.new(username:"abcdefg",email:"123456@123.com",password:"123456") }

  it "can be saved" do
    user.should respond_to(:save)
    user.save.should_not be_false
  end
end
于 2013-04-03T07:35:54.160 に答える