Ruby on rails 在编写控制器规格时,我可以得到rspec的一些反馈吗?
我想知道我是否能对下面的控制器规范有一些反馈。事实上,我在编写规范时是新手,控制器的规范和模型的规范大不相同!所以我想知道我是不是走错了方向 受试者控制器.rbRuby on rails 在编写控制器规格时,我可以得到rspec的一些反馈吗?,ruby-on-rails,model,rspec,rspec2,Ruby On Rails,Model,Rspec,Rspec2,我想知道我是否能对下面的控制器规范有一些反馈。事实上,我在编写规范时是新手,控制器的规范和模型的规范大不相同!所以我想知道我是不是走错了方向 受试者控制器.rb def show @subject = Subject.find(params[:id]) if @subject.trusted?(current_user) @messages = @subject.messages else @messages = @subject.messages.public
def show
@subject = Subject.find(params[:id])
if @subject.trusted?(current_user)
@messages = @subject.messages
else
@messages = @subject.messages.public
@messages = @messages + @subject.messages.where(:user_ids => current_user.id)
@messages.uniq!
end
# sort the list
@messages = @messages.sort_by(&:created_at).reverse
if !@subject.company.id == current_user.company.id
redirect_to(subjects_path, :notice => "Invalid subject")
end
end
受试者\控制器\规格rb
require 'spec_helper'
describe SubjectsController do
before(:each) do
@subject = mock_model(Subject)
end
context "for signed users" do
before(:each) do
@current_user = sign_in Factory(:user)
end
context "GET #show" do
before(:each) do
Subject.stub!(:find, @subject).and_return(@subject)
end
context "when current_user is trusted" do
before(:each) do
messages = []
company = mock_model(Company)
@subject.should_receive(:trusted?).and_return(true)
@subject.should_receive(:messages).and_return(messages)
@subject.should_receive(:company).and_return(company)
end
it "should render success" do
get :show, :id => @subject
response.should be_success
end
end
context "when current_user is not trusted" do
before(:each) do
messages = []
company = mock_model(Company)
@subject.should_receive(:trusted?).and_return(false)
@subject.should_receive(:messages).and_return(messages)
messages.should_receive(:public).and_return(messages)
@subject.should_receive(:messages).and_return(messages)
messages.should_receive(:where).and_return(messages)
@subject.should_receive(:company).and_return(company)
end
it "should render success" do
get :show, :id => @subject
response.should be_success
end
end
context "when subject's company is not equal to current_user's company" do
# I have no idea of how to implement ==
end
end
end
end
工厂.rb
Factory.define :user do |u|
u.first_name 'Test User' #
u.username 'Test User' #
u.surname 'TheTest' #
u.email 'foo@foobar.com' #
u.password 'please' #
u.confirmed_at Time.now #
end
据我所知,你走的路是对的。基本思想是在这些测试中将控制器代码与模型和视图完全隔离。您似乎正在这样做--截取和模拟模型交互 据我所知,你走的是正确的道路。基本思想是在这些测试中将控制器代码与模型和视图完全隔离。您似乎正在这样做--截取和模拟模型交互 根本不要编写RSpec控制器规范。用黄瓜故事代替。更简单,覆盖范围更广。根本不需要编写RSpec控制器规范。用黄瓜故事代替。更简单,覆盖范围更广。谢谢您的回答,其他人需要更多反馈?谢谢您的回答,其他人需要更多反馈?