出于某种原因,我发现很难找到这个简单问题的答案。
我正在测试一个电影模型:
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块中,它就不是很干,因为我需要为每个块做这个。
如何在每个描述块之前创建一行代码来创建新影片?
答案 0 :(得分:5)
使用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
中的任何上下文定义的。