Rspec& Factory Girl:在模型测试中的所有描述块之前创建一个要使用的记录

时间:2015-12-23 00:15:09

标签: ruby-on-rails rspec

出于某种原因,我发现很难找到这个简单问题的答案。

我正在测试一个电影模型:

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块中,它就不是很干,因为我需要为每个块做这个。

如何在每个描述块之前创建一行代码来创建新影片?

1 个答案:

答案 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块中的示例之前执行。请注意,beforelet也可以使用嵌套的describe,在这种情况下,它们是针对嵌套在describe中的任何上下文定义的。