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

请注意,您应该在规范中避免数据库操作,这会使它们变慢。

还有一点,考虑使用工厂来清理你的规格。

于 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 回答