Rails 视图规范:无法在命名空间视图中找到部件



我试着用RSpec进行测试。我遇到的一个问题是,在测试中为admin命名空间中的视图调用render时,让RSpec定位部分。

从本质上讲,在我的视图中,我有很多使用缩写语法的render调用,比如:

render @products

但是,我想,因为RSpec缺乏知道该视图在admin命名空间中的上下文,所以它似乎找不到位于app/views/admin/products/_product.html.erb中的分部。为了让事情运转起来,我必须做一些事情,比如:

render partial: 'admin/products/product', collection: @products

但是,你知道,我非常喜欢较短的语法。这是遵循Rails约定的全部意义。如果你愿意的话,这是对做一个如此好的男孩并把一切都放在适当位置的奖励。

所以,我想知道:在我的RSpec视图测试中,有没有一种方法可以指定我正在某个命名空间中测试视图?有没有什么金块可以让这种疼痛消失?

我知道这是一个老问题,但这个链接https://github.com/rspec/rspec-rails/issues/396可能会帮助其他遇到类似问题的人(比如我)。您可以在逐个规范的基础上配置rspec规范查找视图部分的位置。

如果您觉得这真的是一个RSpec issue,请将其记录在RSpec rails问题上。根据您的总体描述,这听起来像是铁路问题。

当您在视图中使用render @products时,这告诉Rails渲染部分。这与控制器动作中的render不同。

根据Rails文档,当您render @customer:

@customer实例变量包含customer模型的一个实例,这将使用_customer.html.erb来呈现它。

这遗漏了_customer.html.erb的路径。不幸的是,目前的文档让你寻找这个。在收集信息下,是不是这个宝石:

Rails通过查看集合中的模型名称来确定要使用的分部的名称。事实上,您甚至可以创建一个异构集合并以这种方式呈现它,Rails将为集合的每个成员选择合适的分部:

这本质上意味着,在您看来,当您执行render @customer时,将尝试加载:app/views/customers/_customer.html.erb。不是您已经设置的命名空间。如果您希望使用名称空间,您的模型必须已经是该名称空间的一部分(即Admin::Product),或者您必须指定完整的部分路径(正如您已经发现的那样)。

最新更新