Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 在rspec rails中,与;让我们;VS";让我来&引用;_Ruby On Rails 4_Rspec Rails - Fatal编程技术网

Ruby on rails 4 在rspec rails中,与;让我们;VS";让我来&引用;

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)是惰性计算的,如果您不调用它,它将永远不会被实例化,而(:let!)是在每次方法调用之前强制计算的

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
之前计数
,测试将通过