繁体   English   中英

在测试Rails 4引擎时使用Capybara时出错

[英]Error using Capybara while testing an rails 4 engine

我想通过将Capybara和factory_girl与Test :: Unit(不是rspec)一起使用来测试Rails引擎。

我编写以下测试:

test 'get review show' do
  review = create(:review)
  visit aecs_review.admin_review_path(review.id)
  assert true
end

rake test现在得到以下错误:

  1) Error:
NavigationTest#test_get_review_show:
ActionView::Template::Error: undefined method `reviewnumber' for nil:NilClass
D:/Webserver/rails-server/ecommerce/aecs_review/app/views/aecs_review/admin/reviews/show.html.erb:1:in `_____ebserve
r_rails_server_ecommerce_aecs_review_app_views_aecs_review_admin_reviews_show_html_erb___218004451_53574504'

reviewnumber是一种用于返回格式化ID的小模型方法。 它由视图中的@review.reviewnumber执行。

当我尝试访问变量的属性时,在其他视图(索引等)处也会出现错误。 为什么视图中的变量始终为零? 我怎么解决这个问题?

这是我的控制器方法:

require_dependency 'aecs_review/application_controller'

module AecsReview
  class Admin::ReviewsController < ApplicationController
    def show
      @review = Review.find(params[:id])
    end
  end
end

我的看法是:

<h1>Rezension anzeigen: <%= @review.reviewnumber %></h1>
[...]

引擎虚拟应用程序的rake routes

root GET   /                                        aecs_review/admin/reviews#index
admin_reviews GET   /admin/index(.:format)                   aecs_review/admin/reviews#index
admin_review GET   /admin/:id/show(.:format)                aecs_review/admin/reviews#show
admin_review_toggle_visibility GET   /admin/:id/toggle_visibility(.:format)   aecs_review/admin/reviews#toggle_visibility
admin_review_destroy GET   /admin/:id/destroy(.:format)             aecs_review/admin/reviews#destroy
review_create POST  /create(.:format)                        aecs_review/reviews#create
reviews GET   /product/:id(.:format)                   aecs_review/reviews#index
reviews_overview GET   /product/:id/overview(.:format)          aecs_review/reviews#overview
reviews_rating GET   /product/:id/rating(.:format)            aecs_review/reviews#rating
review_new GET   /product/:id/new(.:format)               aecs_review/reviews#new
review GET   /:id(.:format)                           aecs_review/reviews#show
review_edit GET   /:id/edit(.:format)                      aecs_review/reviews#edit
review_update PATCH /:id/update(.:format)                    aecs_review/reviews#update
review_destroy GET   /:id/destroy(.:format)                   aecs_review/reviews#destroy
review_create_evaluation_good GET   /:id/create_evaluation/good(.:format)    aecs_review/reviews#create_evaluation_good
review_create_evaluation_bad GET   /:id/create_evaluation/bad(.:format)     aecs_review/reviews#create_evaluation_bad
review_create_evaluation_abusing GET   /:id/create_evaluation/abusing(.:format) aecs_review/reviews#create_evaluation_abusing

我发现了问题!

在控制器中,我有一个before_filter ,它是主应用程序的一部分。 所以我想重写它。 但是我不小心覆盖了完整的控制器,因此不再需要执行任何控制器方法。

现在,我跳过了before_filter,它起作用了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM