使用登录设计的Rspec测试只工作一次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用登录设计的Rspec测试只工作一次相关的知识,希望对你有一定的参考价值。

我正在尝试使用devise和rspec测试一些视图。在这个测试中,第一个通过。第二个是重定向到sign_in页面。

login_as只是在第一次测试中工作。如果我添加3个测试,则最后一个失败,前两个测试通过。如果我将: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
答案

before(:all)只运行一次。这就是为什么只有第一次测试通过。

使用before(:each)或简单地使用before do

此外,应为每个测试创建用户变量,这意味着它应该在before块中声明:

before do
  user = FactoryBot.create(:user)
  login_as(user, :scope => :user)
end

以上是关于使用登录设计的Rspec测试只工作一次的主要内容,如果未能解决你的问题,请参考以下文章

如何在 rspec 中运行单个测试?

测试保持与Rspec签署

使用 RSpec 为带有 Rails 的 Redis 编写测试

如何使用 omniauth / oauth 对每秒登录次数进行基准测试? (红宝石+rspec)

在 Rails 3.1 中使用 Capybara、Rspec 和 Selenium 进行测试时登录失败

如何设置RSpec以最后测试功能,并且仅在所有其他测试通过时