2017-06-13 90 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)

相關問題