2017-06-13 40 views
0

呈现我的应用测试出现问题。现在它已经停留了很长时间,我甚至想知道为什么我会测试它(因为在测试之外,它完美地工作!)?RoR - 测试错误 - 预计<“categories/new”>但使用<[]>

所以这里的错误:

$耙测试 运行选项:--seed 1855

`#运行:

.F

失败: CreateCategoriesTest#test_invalid_category_submission_results_in_failure [/ Users/user/Documents/ruby​​_project/rails_projects/alpha-blog/test/integration/cr eate_categories_test.rb:17]: 期待< “类别/新建”>但是< []>

斌/轨试验测试/集成/ create_categories_test.rb渲染:15

˚F

失败: CreateCategoriesTest#test_get_new_category_form_and_create_category [/Users/user/Documents/ruby_project/rails_projects/alpha-blog/test/integration/create_categories_test.rb:7]: 期待< “类别/新”>但< []渲染>

斌/轨试验测试/集成/ create_categories_test.rb:5

.........

在0.638134s,18.8048运行/秒,25.0731断言/秒完成。12点运行, 16断言,2次失误,0失误,0跳过

测试看起来像:

require 'test_helper' 

class CreateCategoriesTest < ActionDispatch::IntegrationTest 

    test "get new category form and create category" do 
    get new_category_path 
    assert_template 'categories/new' 
    assert_difference 'Category.count', 1 do 
    post categories_path, params: { category: {name: "sports"}} 
    follow_redirect! 
    end 
    assert_template 'categories/index' 
    assert_match 'sports', response.body 
    end 

    test "invalid category submission results in failure" do 
    get new_category_path 
    assert_template 'categories/new' 
    assert_no_difference 'Category.count' do 
    post categories_path, params: { category: {name: " "}} 
    end 
    assert_template 'categories/new' 
    assert_select 'h3.panel-title' 
    assert_select 'div.panel-body' 
    end 
end 

和控制器:

class CategoriesController < ApplicationController 

    before_action :require_admin, except: [:index, :show] 

    def index 
    @categories = Category.paginate(page: params[:page], per_page: 5) 
    end 

    def new 
    @category = Category.new 
    end 

    def create 
    @category = Category.new(category_params) 
    if @category.save 
     flash[:success] = "La nueva categoria se creó correctamente" 
     redirect_to categories_path 
    else 
     render 'new' 
    end 
    end 

    def index 
    @categories = Category.paginate(page: params[:page], per_page: 5) 
    end 

    def show 
    end 

    private 

    def category_params 
    params.require(:category).permit(:name) 
    end 

    def require_admin 
    if !logged_in? || logged_in? and !current_user.try(:admin?) 
     flash[:danger] = "Solamente el admin puede acceder a esta seccion" 
    redirect_to categories_path 
    end 
    end 


end 

只给你几个正视我迄今为止解决我的问题所做的工作(因为它出现之前),我已经替换了“获取新类别表单并创建类别”的这一部分:

post_via_redirect categories_path, category: {name: "sports"} 

由:

post categories_path, params: { category: {name: "sports"}} 
follow_redirect! 

为测试 “失败无效类别提交结果” 我取代:

post categories_path, category: {name: " "} 

由:

post categories_path, params: { category: {name: " "}} 

而且我之前的工作对应用程序的使用(在控制器中)设置了限制:

before_action :require_admin, except: [:index, :show] 
[...] 
    def require_admin 
    if !logged_in? || logged_in? and !current_user.try(:admin?) 
     flash[:danger] = "Solamente el admin puede acceder a esta seccion" 
    redirect_to categories_path 
    end 
    end 

有没有人有什么想法发生了什么?提前致谢!

回答

0

好吧,我已经得到了我的问题的答案。哑巴我,我没有通过这些测试的用户,显然,通过要求用户测试不能正确执行了。

因此,这里的测试帮助文件的修正:

require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 

class ActiveSupport::TestCase 
    # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 
    fixtures :all 

    # Add more helper methods to be used by all tests here... 
    def sign_in_as(user, password) 
    post login_path, params: { session: {email: user.email, password: password}} 
    end 
end 

,为create_categories_test:

require 'test_helper' 

class CreateCategoriesTest < ActionDispatch::IntegrationTest 

    def setup 
     @user = User.create(username: "John", email: "[email protected]", password: "password", admin: true) 
    end 

    test "get new category form and create category" do 
    sign_in_as(@user, "password") 
    get new_category_path 
    assert_template 'categories/new' 
    assert_difference 'Category.count', 1 do 
    post categories_path, params: { category: {name: "sports"}} 
    follow_redirect! 
    end 
    assert_template 'categories/index' 
    assert_match 'sports', response.body 
    end 

    test "invalid category submission results in failure" do 
    sign_in_as(@user, "password") 
    get new_category_path 
    assert_template 'categories/new' 
    assert_no_difference 'Category.count' do 
    post categories_path, params: { category: {name: " "}} 
    end 
    assert_template 'categories/new' 
    assert_select 'h3.panel-title' 
    assert_select 'div.panel-body' 
    end 
end 

为无用的问题和困扰对不起你们!

0

矿是把expect之前get :index


get :index expect(response).to render_template(:index)

相关问题