Rails/Rspec 视图:测试部分视图的正确方法

发布于 2024-10-26 14:02:08 字数 391 浏览 1 评论 0原文

我有一个 Rails 3 部分,它列出了所有类别作为导航菜单 - 它位于大多数模板页面上,但不是全部模板页面上......假设大约 75%。我现在正在尝试测试部分(在 RSpec 中),并且我刚刚意识到一些事情:

目前,我正在实际视图中调用 Category.all 。困难在于,因为这涉及数据库,所以视图规范中的模拟/存根被忽略,因此测试失败。

我猜替代方法是在应用程序控制器中分配变量,然后将其作为局部变量传递给局部变量。尽管如此,我的页面中约有 25% 不会使用该变量,我想知道是否有更优雅的处理方式。

简而言之,我希望查看规范在不接触测试数据库的情况下通过,但我不确定传递给我的部分的全局变量是最好的方法......并且我没有在每个 (& ; 仅)需要它的控制器。

任何建议表示赞赏...

I have a Rails 3 partial that lists all categories as a navigation menu - it's on most, but not all of my template pages...let's say about 75%. I'm trying to test the partial (in RSpec) right now, and I've just realised a few things:

At the moment, I'm calling Categories.all in the actual view. The difficulty is that, because that touches the database, my mocks/stubs in the view spec are ignored, and consequently the test fails.

I'm guessing the alternative is to assign the variable in the application controller, and then pass it as a local variable to the partial. Still, about 25% of my pages won't use the variable and I'm wondering if there's a more graceful way of doing things.

In short, I want view specs to pass without touching the test DB, but I'm not sure a global variable passed to my partial is the best way to do it...and I'm not declaring the variable in every (& only) those controllers who require it.

Any suggestions appreciated...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁对谁错谁最难过 2024-11-02 14:02:08

为什么不为所有类别创建一个辅助方法?

  # in categories helper

def all_categories
  @all_categories ||= Category.all
end

或者...

# application controller

helper_method :all_categories

def all_categories 
...

然后您可以在规范中删除此方法,并且您将不会接触数据库

Why not create a helper method for all categories?

  # in categories helper

def all_categories
  @all_categories ||= Category.all
end

Or...

# application controller

helper_method :all_categories

def all_categories 
...

You can then stub out this method in your specs and you won't be touching the DB

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文