出于某种原因,我发现很难找到这个简单问题的答案.
我正在测试一个电影模型:
RSpec.describe Movie, type: :model do describe 'some_method' do it "should do something" do end end describe 'some_other_method' do it "should do something else" do end end end
我可以制作一部电影build(:movie)
,但我不知道应该把它放在哪里.在describe块之外,它会抛出一个错误:
未定义的方法`build'for#
但是如果我把它放在describe块中,它就不是很干,因为我需要为每个块做这个.
如何在每个描述块之前创建一行代码来创建新电影?
用途let
:
RSpec.describe Movie, type: :model do let(:movie) { build(:movie) } describe 'an awesome movie' do it "is awesome" do expect(movie.awesome?).to be true end end end
该let
块在示例的上下文中执行,因此let
在测试中可以使用定义的方法.这也适用于before
:
before do movie.awesome = true end
语句在before
describe块中的示例之前执行.请注意,before
并let
还可以嵌套的工作describe
,在这种情况下,它们是为嵌套在任何上下文定义describe
.