2017-02-15 4 views
1

je ce fichier RSpec à exécuter:Rails 5 + factorygirl + Rspec: méthode d'aide non définie

require 'rails_helper' 

RSpec.describe FinancialManager::SalaryRecord::SomeRecordsController, 
       type: :controller, 
       financial_manager: true, 
       salary_record: true, 
       some_record: true do 

    context "GET #index" do 
    it "assigns all record in instance variable" do 
     some_record = 
     FactoryGirl.create(
      :valid_financial_manager_salary_record_some_record 
     ) 
     get :index 
     expect(assigns(:financial_manager_salary_record_some_records)) 
     .to eq([some_record]) 
    end 
    end 
end 

qui utilisant ce modèle d'enregistrement:

class FinancialManager::SalaryRecord::SomeRecord < ApplicationRecord 
    sanitize = ->(s) { ActionController::Base.helpers.sanitize(s) } 

    validates :level, 
      presence: true, 
      inclusion: { 
       in: sanitize.call("levels") 
      }, 
      numericality: { only_integer: true } 
end 

Le fichier modèle ci-dessus appelle une méthode levels qui est une méthode d'aide que j'ai définie dans le dossier helpers. Quand je lance le fichier RSpec, je suis arrivé cette erreur:

Failure/Error: 
     FactoryGirl.create(
     :valid_financial_manager_salary_record_some_record 
     ) 

    NoMethodError: 
     undefined method `levels' for #<FinancialManager::SalaryRecord::SomeRecord:0x000000077f2db0> 

La question est, comment puis-je utiliser la méthode d'aide lors de l'exécution des tests RSpec? Et suis-je en train d'utiliser la méthode d'aide correctement?

Meilleures salutations

Répondre

1

Enfin, je fais un peu googler sur la façon d'appeler des méthodes d'aide à l'intérieur des modèles et a trouvé une solution et a changé mon modèle en ceci:

class FinancialManager::SalaryRecord::SomeRecord < ApplicationRecord 
    validates :level, 
      presence: true, 
      inclusion: { 
       in: ApplicationController.helpers.levels 
      }, 
      numericality: { only_integer: true } 
end 

Le système et le RSpec fonctionnent bien

+0

Merci d'avoir posté la réponse à votre question, j'avais du mal à trouver comment invoquer des assistants à partir d'un rappel d'usine et cela a fonctionné. +1 Vous devriez accepter votre propre réponse ^^ – David