删除rspec rails中的对象

rik*_*mbo 1 rspec ruby-on-rails destroy factory-bot

我想创建一个对象,然后在rspec测试期间删除它...这可能吗?

这段代码:

describe User do

  it "should be invalid if email is not unique" do
    user = FactoryGirl.create(:user, id: 1, email: "g@g.com").should be_valid
    FactoryGirl.build(:user, email: "g@g.com").should_not be_valid
    User.destroy(user.id)
    FactoryGirl.build(:user, email: "g@g.com").should be_valid
  end


end
Run Code Online (Sandbox Code Playgroud)

返回错误:

Failure/Error: User.destroy(user.id)
     NoMethodError:
       undefined method `id' for true:TrueClass
Run Code Online (Sandbox Code Playgroud)

小智 5

问题不在于您无法在rspec测试中删除用户 - 而是您的user对象未获得您想要的任务:

FactoryGirl.create(:user, id: 1, email: "g@g.com").should be_valid
Run Code Online (Sandbox Code Playgroud)

计算结果为true,并分配给user.然后,当你试图调用时user.id,它会查找id属性true并被卡住.

您可以将该特定行拆分为:

FactoryGirl.build(:user, id: 1, email: "g@g.com").should be_valid
user = FactoryGirl.create(:user, id: 1, email: "g@g.com")
Run Code Online (Sandbox Code Playgroud)

或者不担心本地用户变量,只是根据电子邮件地址删除,即

User.destroy((User.find_by email: "g@g.com").id)
Run Code Online (Sandbox Code Playgroud)