我想编写一个测试来确保“专家”用户可以创建文章,而“基本”用户则不能。例如,基本用户无法访问此处:"http://0.0.0.0:3000/articles/new"
。下面是我的文章控制器的缩短版本,然后是文章测试。控制器工作,但我想测试证明它。我不知道该怎么说“代码在这里”。谢谢。
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 :(得分:2)
答案 1 :(得分:0)
在您的spec文件中,您可以这样做:
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 :(得分:0)
不要测试不应该发生的事情,而应考虑更简单地测试应该发生的事情:
it "should return 401" do
get :new
expect(response.status).to eq(401)
end