[英]What should I use in place of “assigns” when using RSpec with Rails 5+?
我目前正在以请求规范的形式测试我的一个控制器的索引操作,并希望确保对象集合被传递。 到目前为止,我已经查阅了这篇文章以获得指导:
it "populates an array of contacts starting with the letter" do
smith = FactoryBot.create(:contact, lastname: 'Smith')
jones = FactoryBot.create(:contact, lastname: 'Jones')
get :index, letter: 'S'
expect(assigns(:contacts)).to match_array([smith])
end
不幸的是,上面的例子会抛出这个错误:
NoMethodError: assigns has been extracted to a gem. To continue using it, add `gem 'rails-controller-testing'` to your Gemfile.
我很想知道在这种情况下我会使用什么来支持分配? 对于这种新方法的一个例子,我已经上下看了很多,但结果很短。
参考只需测试控制器的输出,而不是将手指伸入内部。 最好不要使用控制器规范 - 而是使用请求或功能规范。
控制器的输出是包含标题和响应正文的响应对象。
因此,例如,如果您在请求规范中测试 API,您可以在响应正文中测试解析的 json:
it "returns an array of contacts starting with the letter" do
smith = FactoryBot.create(:contact, lastname: 'Smith')
jones = FactoryBot.create(:contact, lastname: 'Jones')
get :index, letter: 'S'
last_names = parsed_response["contacts"].map { |c| c["lastname"] }
expect(last_names).to include 'Smith'
expect(last_names).to_not include 'Jones'
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.