有没有惯用的方法来干掉RSpec中重复的方法调用

时间:2016-08-24 08:58:54

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

当在相同的描述块中重复进行相同的调用时,例如

RSpec.describe Grant do
  let(:grant) { Grant.make }

  describe "#exchange!" do
    it "destroys token" do
      grant.exchange! # dry me up!
      expect(grant).to be_destroyed
    end
    it "returns a Token" do
      expect(grant.exchange!).to be_a(Token) # dry me up!
    end
  end
end

我想干涸grant.exchange!

我已经找到了如何使用subject,但我知道明确的主题是臭的。

1 个答案:

答案 0 :(得分:1)

您可以使用let!来定义在每个示例之前执行的memoized帮助程序:

RSpec.describe Grant do
  let(:grant) { Grant.make }

  describe "#exchange!" do
    let!(:result) { grant.exchange! }

    it "destroys token" do
      expect(grant).to be_destroyed
    end

    it "returns a Token" do
      expect(result).to be_a(Token)
    end
  end
end

但是,我个人更喜欢在示例中明确地调用该方法,就像在代码中一样。它使得在调用之前和之后处理状态变得更容易。