我正在尝试使用devise和rspec测试一些视图。在此测试中,第一个通过。第二个是重定向到sign_in页面。
login_as只能在第一个测试中使用。
如果我添加3个测试,则最后一个失败,而前2个通过。
如果我将:all
更改为:each
,则第一个失败,第二个通过
require 'rails_helper'
RSpec.describe StoresController, type: :controller do
context "with valid params" do
user = FactoryBot.build(:user)
before(:all) do
login_as(user, :scope => :user)
end
it "renders the index template" do
get :index
expect(response).to render_template("index")
end
it "creates a new store" do
get :new
expect(response).to render_template("new")
end
end
end
答案 0 :(得分:0)
before(:all)
将只运行一次。这就是为什么只有第一个测试通过。
使用before(:each)
或简单地使用before do
此外,应为每个测试创建用户变量,这意味着应在before块内声明该变量:
before do
user = FactoryBot.create(:user)
login_as(user, :scope => :user)
end