如何将大 rspec 文件分成较小的部分

How to divide a big rspec file into smaller parts

因此,在我的项目中,我使用 cancancan 进行授权。对于写作能力规范,我们在 ability_spec.rb 中维护。从最近几年开始,文件大小已大大增加。现在它有大约 3000 行,我们面临的主要问题是我们无法一次性 运行 整个文件。如果我们尝试这样做,我们的系统就会冻结。为了解决这个问题,我想出了将文件分成多个文件的方法。因为,rspec 遵循命名约定,所以我有点困惑如何继续它。

class Ability
  include CanCan::Ability
  attr_accessor :feature_factory
  def initialize(user, session = nil)
    alias_action :read, :update, :to => :read_write
    user ||= User.new # guest user (not logged in)


    can :read, Abc
    can :manage, :file
    can :view, :login

    if user.anonymous_user?
      ## a lot of abiities
    end

    if user.mum_user?
       ## a lot of abiities
    end

    if user.tsm_user?
       ## a lot of abiities
    end

   #Similarly we have a lot of roles and abilities
end

require 'spec_helper'
require "cancan/matchers"


describe Ability do
  describe "#anonymous_user" do
    ## a lot of specs for testing
  end

  describe "#tsm_user" do
     ## a lot of specs for testing
  end

  describe "#mum_user" do
     ## a lot of specs for testing
  end

  # similarly for other user roles

end

技能文件路径 - app/models/ability.rb

能力说明文件路径 - spec/models/ability_spec.rb

所以,到目前为止,我试图在 spec/models 中创建一个 ability_folder,并且我根据各自文件中的角色划分了规范。如下所示

spec/models/ability/anonymous_user_spec.rb
require 'spec_helper'
require "cancan/matchers"

describe Ability do
  describe "#anonymous_user" do
    ## a lot of specs for testing
  end
end

spec/models/ability/tsm_user_spec.rb
require 'spec_helper'
require "cancan/matchers"

describe Ability do
  describe "#tsm_user" do
    ## a lot of specs for testing
  end
end

spec/models/ability/mum_user_spec.rb
require 'spec_helper'
require "cancan/matchers"

describe Ability do
  describe "#mum_user" do
    ## a lot of specs for testing
  end
end

当我尝试 运行 时,它没有给我任何错误,并且它在一秒钟内 运行。另外,我试图引入一个错误,但它并没有失败。所以,我的问题是

1) 文件很大时如何解决此类问题

2) 如果上述方法是正确的,那么为什么它对我不起作用

3) 如果我分割文件会有性能提升吗

  1. 拆分一个大的规范文件听起来是个好主意。它是 在巨大的规格文件中导航的噩梦。然而问题 转向维护多个规范文件(这可能仍然是 减少邪恶)。
  2. 据我所知,它对你不起作用,因为 测试数据库问题。你解决了对吧?
  3. 你可能会看到一个小 如果您 运行 并行规格,则性能会提高。代替 运行在 1 个线程中使用 1 个长规格,它将 运行 中的较小规格 平行线。如果你不 运行 它并行它不会给你任何 性能提升。