我正在為 Rails 中的控制器撰寫測驗:
require 'rails_helper'
RSpec.describe GoodsController, type: :controller do
DatabaseCleaner.clean
user = User.create(password: "12345678")
user.save!
describe "GET index" do
it "renders the index template" do
sign_in user
get "index"
expect(response).to render_template("index")
end
end
DatabaseCleaner.clean
end
在GoodsController有這個index動作我想測驗:
def index
if params[:category_id] == nil
@goods = Good.all
else
@goods = Good.where(category_id: params[:category_id])
end
end
當我運行測驗時,我收到此錯誤:
1) GoodsController GET index renders the index template
Failure/Error: expect(response).to render_template("index")
expecting <"index"> but was a redirect to <http://test.host/users/sign_in>
# ./spec/controllers/goods_controller_spec.rb:12:in `block (3 levels) in <top (required)>'
sign_in user根據 SO 中的其他答案,我已經添加了該行,但沒有幫助。它仍然重定向到日志記錄頁面。我該如何解決?
uj5u.com熱心網友回復:
在user運行時的例子(又名測驗)創建不使用RSpec的。它只是塊內的一個變數,沒有任何用處。
當燈具/工廠打交道,你應該可以創建他們before,let或者測驗本身內(it塊)。
describe "GET index" do
let(:user) { User.create(password: "12345678") }
it "renders the index template" do
# OR, create it here before sign_in
sign_in user
get "index"
expect(response).to render_template("index")
end
end
不確定您是否使用factory_bot,但您應該查看它。通常DatabaseCleaner設定在里面rails_helper,查看這個SO post 了解更多細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/343889.html
