Как разделить большой файл rspe c на более мелкие части - PullRequest
0 голосов
/ 28 апреля 2020

Итак, в моем проекте я использую cancancan для авторизации. Для написания способности spe c мы поддерживаем вility_spe c .rb. За последние несколько лет размер файлов значительно вырос. Теперь в нем около 3000 строк, что довольно много, и главная проблема, с которой мы сталкиваемся, заключается в том, что мы не можем запустить весь файл за один раз. Если мы попытаемся это сделать, наша система зависнет. Чтобы решить эту проблему, я пришел к подходу, чтобы разделить файл на несколько файлов. Так как rspe c следует соглашению об именах, я немного озадачен. Как это сделать.

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 / able.rb

Способность spe c путь к файлу - spec / models /ility_spe c .rb

Итак, пока я пытался создать папкуility_folder внутри spec / models, и я разделил спецификации на основе ролей в их соответствующих файлах. Что-то вроде ниже

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 Ответ

1 голос
/ 29 апреля 2020
  1. Разделение большого файла spe c звучит как хорошая идея. Это кошмар для навигации в файле гигантских c spe c. Однако проблема заключается в том, чтобы поддерживать несколько файлов spe c (что, вероятно, еще менее опасно).
  2. Насколько я знаю, у вас это не сработало из-за проблемы с базой данных Test. Вы решили это, верно?
  3. Вы можете увидеть небольшое улучшение производительности, если вы запустите параллельные спецификации. Вместо запуска 1 длинной спецификации c в 1 потоке она будет параллельно запускать меньшие спецификации. Если вы не запустите его параллельно, это не улучшит производительность.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...