2013-08-20 2 views
0

Я хотел бы написать тест, чтобы убедиться, что «экспертные» пользователи могут создавать статьи, а «базовые» пользователи не могут. Например, базовый пользователь не может здесь: "http://0.0.0.0:3000/articles/new". Ниже приведена сокращенная версия моего контроллера товаров, а затем тест статей. Контроллер работает, но я бы хотел, чтобы тест показал это. Я не уверен, что положить туда, где говорится, что «код идет здесь». Благодарю.Rails rspec тест для возможностей cancan контроллера

articles_controller:

class ArticlesController < ApplicationController 
    load_and_authorize_resource 

     # GET /articles/new 
     # GET /articles/new.json 
     def new 
     puts "in articles new" 
     @article = Article.new 

     respond_to do |format| 
      format.html # new.html.erb 
      format.json { render json: @article } 
     end 
     end 
    end 

articles_controller_spec:

describe ArticlesController do 

    before (:each) do 
    @user = FactoryGirl.create(:user) 
    @user.role = "basic" 
    sign_in @user 
    end 

    describe "create article" do 
    it "should not create new article" do 
     #code goes here 
    end 
    end 
end 

ответ

0

в файле спецификации, вы можете сделать это нравится:

describe "create article" do 
    it "should not create new article" do 
    get :new 
    expect(response).not_to render_template("new") 
    end 
end 

В документе канкан см https://github.com/ryanb/cancan/wiki/Testing-Abilities, вы можете получить подробности.

2

Тестирование возможностей CanCan из ваших спецификаций Контроллеров скоро взорвет ваши спецификации.

Я предпочитаю, чтобы проверить способности в spec/models/ability_spec.rb используя cancan/matchers

+0

Я на самом деле пытается решайте, следует ли тестировать мои способности в модели или спецификации контроллера. Можете ли вы объяснить, почему вы считаете, что тестирование в спецификации модели является предпочтительным? – Emeka

+1

Это быстрее, требуется меньше кода для покрытия большинства случаев, и все тесты будут в одном месте. – ck3g

+0

После моего 10-го спекулянта, пытающегося разобрать json с контроллера, я думаю, что я начинаю соглашаться. Гораздо проще просто проверить способность, чем весь контроллер, в зависимости от способности. – Emeka

0

Вместо тестирования, что не должно произойти, рассмотрим более простой тест, что должно произойти:

it "should return 401" do 
    get :new 
    expect(response.status).to eq(401) 
end 
Смежные вопросы