Proper place to override ApplicationController methods










0















I need to override a controller method when running a test suite against my application.



I am having to put my override in my app code, which I was hoping to prevent.



class ApplicationController
end

if ENV['LAYOUT'] == 'test'
class ApplicationController
layout: "test_layout"
end
end


ApplicationController does not exist for me to override in any of the spec helpers. The load order is:



  1. spec_helper

  2. config/application

  3. rails_helper

  4. application_controller

So I am setting the ENV variable in my spec_helper and redefine ApplicationController if that ENV is set. This seems messy and I would rather override ApplicationController from the /spec directory.



Is there a better place for me to override ApplicationController in the /specs directory?










share|improve this question






















  • What's the use case for this? Maybe there's a better way to achieve what you want but I don't really get why would you change the layout when testing (you already have mocks and stubs to override methods).

    – arieljuod
    Nov 15 '18 at 1:11











  • The main layout adds additional scripts that slows testing down. I can increase our test run by 50% if I can use a test layout.

    – Travis
    Nov 15 '18 at 1:46











  • Hmmm, personally, what I do is just wrap those scripts with an unless Rails.env.test? do ..... end block, so they are not rendered on the view when the environment is test. You won't have to mantain two layouts this way.

    – arieljuod
    Nov 15 '18 at 1:56











  • I have other methods in AppController that need to be overridden.

    – Travis
    Nov 15 '18 at 2:31















0















I need to override a controller method when running a test suite against my application.



I am having to put my override in my app code, which I was hoping to prevent.



class ApplicationController
end

if ENV['LAYOUT'] == 'test'
class ApplicationController
layout: "test_layout"
end
end


ApplicationController does not exist for me to override in any of the spec helpers. The load order is:



  1. spec_helper

  2. config/application

  3. rails_helper

  4. application_controller

So I am setting the ENV variable in my spec_helper and redefine ApplicationController if that ENV is set. This seems messy and I would rather override ApplicationController from the /spec directory.



Is there a better place for me to override ApplicationController in the /specs directory?










share|improve this question






















  • What's the use case for this? Maybe there's a better way to achieve what you want but I don't really get why would you change the layout when testing (you already have mocks and stubs to override methods).

    – arieljuod
    Nov 15 '18 at 1:11











  • The main layout adds additional scripts that slows testing down. I can increase our test run by 50% if I can use a test layout.

    – Travis
    Nov 15 '18 at 1:46











  • Hmmm, personally, what I do is just wrap those scripts with an unless Rails.env.test? do ..... end block, so they are not rendered on the view when the environment is test. You won't have to mantain two layouts this way.

    – arieljuod
    Nov 15 '18 at 1:56











  • I have other methods in AppController that need to be overridden.

    – Travis
    Nov 15 '18 at 2:31













0












0








0








I need to override a controller method when running a test suite against my application.



I am having to put my override in my app code, which I was hoping to prevent.



class ApplicationController
end

if ENV['LAYOUT'] == 'test'
class ApplicationController
layout: "test_layout"
end
end


ApplicationController does not exist for me to override in any of the spec helpers. The load order is:



  1. spec_helper

  2. config/application

  3. rails_helper

  4. application_controller

So I am setting the ENV variable in my spec_helper and redefine ApplicationController if that ENV is set. This seems messy and I would rather override ApplicationController from the /spec directory.



Is there a better place for me to override ApplicationController in the /specs directory?










share|improve this question














I need to override a controller method when running a test suite against my application.



I am having to put my override in my app code, which I was hoping to prevent.



class ApplicationController
end

if ENV['LAYOUT'] == 'test'
class ApplicationController
layout: "test_layout"
end
end


ApplicationController does not exist for me to override in any of the spec helpers. The load order is:



  1. spec_helper

  2. config/application

  3. rails_helper

  4. application_controller

So I am setting the ENV variable in my spec_helper and redefine ApplicationController if that ENV is set. This seems messy and I would rather override ApplicationController from the /spec directory.



Is there a better place for me to override ApplicationController in the /specs directory?







ruby-on-rails rspec3






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 15 '18 at 0:53









TravisTravis

1,49731524




1,49731524












  • What's the use case for this? Maybe there's a better way to achieve what you want but I don't really get why would you change the layout when testing (you already have mocks and stubs to override methods).

    – arieljuod
    Nov 15 '18 at 1:11











  • The main layout adds additional scripts that slows testing down. I can increase our test run by 50% if I can use a test layout.

    – Travis
    Nov 15 '18 at 1:46











  • Hmmm, personally, what I do is just wrap those scripts with an unless Rails.env.test? do ..... end block, so they are not rendered on the view when the environment is test. You won't have to mantain two layouts this way.

    – arieljuod
    Nov 15 '18 at 1:56











  • I have other methods in AppController that need to be overridden.

    – Travis
    Nov 15 '18 at 2:31

















  • What's the use case for this? Maybe there's a better way to achieve what you want but I don't really get why would you change the layout when testing (you already have mocks and stubs to override methods).

    – arieljuod
    Nov 15 '18 at 1:11











  • The main layout adds additional scripts that slows testing down. I can increase our test run by 50% if I can use a test layout.

    – Travis
    Nov 15 '18 at 1:46











  • Hmmm, personally, what I do is just wrap those scripts with an unless Rails.env.test? do ..... end block, so they are not rendered on the view when the environment is test. You won't have to mantain two layouts this way.

    – arieljuod
    Nov 15 '18 at 1:56











  • I have other methods in AppController that need to be overridden.

    – Travis
    Nov 15 '18 at 2:31
















What's the use case for this? Maybe there's a better way to achieve what you want but I don't really get why would you change the layout when testing (you already have mocks and stubs to override methods).

– arieljuod
Nov 15 '18 at 1:11





What's the use case for this? Maybe there's a better way to achieve what you want but I don't really get why would you change the layout when testing (you already have mocks and stubs to override methods).

– arieljuod
Nov 15 '18 at 1:11













The main layout adds additional scripts that slows testing down. I can increase our test run by 50% if I can use a test layout.

– Travis
Nov 15 '18 at 1:46





The main layout adds additional scripts that slows testing down. I can increase our test run by 50% if I can use a test layout.

– Travis
Nov 15 '18 at 1:46













Hmmm, personally, what I do is just wrap those scripts with an unless Rails.env.test? do ..... end block, so they are not rendered on the view when the environment is test. You won't have to mantain two layouts this way.

– arieljuod
Nov 15 '18 at 1:56





Hmmm, personally, what I do is just wrap those scripts with an unless Rails.env.test? do ..... end block, so they are not rendered on the view when the environment is test. You won't have to mantain two layouts this way.

– arieljuod
Nov 15 '18 at 1:56













I have other methods in AppController that need to be overridden.

– Travis
Nov 15 '18 at 2:31





I have other methods in AppController that need to be overridden.

– Travis
Nov 15 '18 at 2:31












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53310946%2fproper-place-to-override-applicationcontroller-methods%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53310946%2fproper-place-to-override-applicationcontroller-methods%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Barbados

How to read a connectionString WITH PROVIDER in .NET Core?

Node.js Script on GitHub Pages or Amazon S3