【问题标题】:rspec before and before(:all)rspec before 和 before(:all)
【发布时间】:2013-10-22 06:47:31
【问题描述】:

这就是我正在做的事情。

describe "tests" do 
  let!(:user1) { FactoryGirl.create(:user)}

  before do
    user1.name = "new_name"
  end
  # tests...
end

它可以工作,但在每次测试之前都会调用 before 块。试图替换为

before(:all) do
  user1.name = "new_name"
end

但后来我失败了:

Failure/Error: let!(:seller1)                    { FactoryGirl.create(:user)}
     NoMethodError:
       undefined method `stub' for #<User:0x007f85477641d8>

【问题讨论】:

  • 你为什么要那样做?您可以在创建过程中覆盖FactoryGirl 默认值FactoryGirl.create(:user, name: "new_name")

标签: ruby-on-rails rspec factory-bot rspec-rails


【解决方案1】:

你能做到吗:

let(:user1) { FactoryGirl.create(:user, :name => "new_name")}

您可能根本不需要 before do end 语句

【讨论】:

  • 嗨,感谢您的回复。我知道我可以,我正在尝试保存这个不需要的操作。如果我有 20 个测试,我不希望每次都调用它。只有一次。
  • 在走这条路之前,你绝对应该做基准测试。使用 before :all 在您的测试之间创建共享状态。如果在一个测试中 user1 发生了某些事情,您的所有其他测试都可能受到影响。更糟糕的是,这种行为可能会根据测试的顺序而改变!换句话说,始终默认为每个测试创建您需要的状态,并且仅在您迫切需要时共享状态!
猜你喜欢
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多