Ruby on rails 4 在rspec rails中,与;让我们;VS";让我来&引用;
我用谷歌搜索了这个问题,但仍然不清楚。我知道(:let)是惰性计算的,如果您不调用它,它将永远不会被实例化,而(:let!)是在每次方法调用之前强制计算的Ruby on rails 4 在rspec rails中,与;让我们;VS";让我来&引用;,ruby-on-rails-4,rspec-rails,Ruby On Rails 4,Rspec Rails,我用谷歌搜索了这个问题,但仍然不清楚。我知道(:let)是惰性计算的,如果您不调用它,它将永远不会被实例化,而(:let!)是在每次方法调用之前强制计算的 let(:article) = { Article.new(name: 'article1') } let!(:article) = { Article.new(name: 'article1') } 任何人都可以解释更多,使用let有什么好处 有时您希望出现let的间接结果 例如 let(:article) = { Article.cre
let(:article) = { Article.new(name: 'article1') }
let!(:article) = { Article.new(name: 'article1') }
任何人都可以解释更多,使用let有什么好处 有时您希望出现
let
的间接结果
例如
let(:article) = { Article.create(name: 'article1' }
it "does not add an article with a duplicate name" do
expect(Article.create(name: article.name)).not_to change(Article.count)
end
这实际上会失败,因为测试前的Article.count
将不包括Article
对象,因为它在被引用之前尚未创建。因此,即使没有创建新文章(具有重复名称的文章),测试仍会检测到对article.count的更改
现在,如果你这样做
let!(:article) = { Article.create(name: 'article1' }
it "does not add an article with a duplicate name" do
expect(Article.create(name: article.name)).not_to change(Article.count)
end
article
对象将已经存在于文章中。在expect
之前进行计数
,测试将通过。有时您希望出现let
的间接结果
例如
let(:article) = { Article.create(name: 'article1' }
it "does not add an article with a duplicate name" do
expect(Article.create(name: article.name)).not_to change(Article.count)
end
这实际上会失败,因为测试前的Article.count
将不包括Article
对象,因为它在被引用之前尚未创建。因此,即使没有创建新文章(具有重复名称的文章),测试仍会检测到对article.count的更改
现在,如果你这样做
let!(:article) = { Article.create(name: 'article1' }
it "does not add an article with a duplicate name" do
expect(Article.create(name: article.name)).not_to change(Article.count)
end
article
对象将已经存在于article中。在expect
之前计数,测试将通过