控制器测试/规格是这些奇怪的存根创造出来的想法单元测试控制器隔离。这个想法被证明是有缺陷的,最近真的不流行了。
控制器规范实际上并不向通过路由的应用程序发出真正的HTTP请求。相反,他们只是假装并通过一个假请求。
可以使RSpec使用
render_views
.
describe InvoicesController, :type => :controller do
render_views
it "renders a csv attachment" do
get :index, format: :csv
expect(response.headers["Content-Type"]).to eq("text/csv; charset=utf-8")
expect(response).to have_http_status(200)
expect(response).to render_template :index
end
end
request spec
.
Rails团队和RSpec核心团队的官方推荐
单个控制器动作,但与控制器测试不同的是
这为您正在编写的测试添加了真实性,并有助于避免
控制器规范中常见的许多问题。
http://rspec.info/blog/2016/07/rspec-3-5-has-been-released/
# spec/requests/invoices
require 'rails_helper'
require 'csv'
RSpec.describe "Invoices", type: :request do
let(:csv) { response.body.parse_csv }
# Group by the route
describe "GET /invoices" do
it "renders a csv attachment" do
get invoices_path, format: :csv
expect(response.headers["Content-Type"]).to eq("text/csv; charset=utf-8")
expect(response).to have_http_status(200)
expect(csv).to eq ["foo", "bar"] # just an example
end
end
end