在 RSpec 中是否有一种惯用的方法来干掉重复的方法调用
Is there an idiomatic way to dry up repeated method calls in RSpec
当在同一个描述块中重复进行相同的调用时,例如
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
来做到这一点,但我知道露骨的主题很臭。
您可以使用 let!
定义一个在每个示例之前执行的记忆助手:
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
但是,我个人更喜欢从示例中显式调用该方法,就像在您的代码中一样。更容易处理调用前后的状态。
当在同一个描述块中重复进行相同的调用时,例如
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
来做到这一点,但我知道露骨的主题很臭。
您可以使用 let!
定义一个在每个示例之前执行的记忆助手:
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
但是,我个人更喜欢从示例中显式调用该方法,就像在您的代码中一样。更容易处理调用前后的状态。