所以除了好奇心之外,我没有充分理由需要了解这一点 - 最好的理由 - 但我不确定这里发生了什么。
背景
我正在阅读RSpec书并更新示例。
在第24章 - Rails控制器上,有一个消息控制器的测试。
## spec/controllers/messages_controller_spec.rb ##
require 'spec_helper'
describe MessagesController do
describe "POST create" do
let(:message) { mock_model(Message).as_null_object }
before do
Message.stub(:new).and_return(message)
end
# Then a bunch of Tests...
context "when the message fails to save" do
before do
message.stub(:save).and_return(false)
post :create
end
it "assigns @message" do
assigns[:message].should eq(message)
end
it "renders the new template" do
response.should render_template("new")
end
end
end
end
这与消息控制器一致:
## app/controllers/messages_controller.rb ##
class MessagesController < ApplicationController
def create
@message = Message.new(params[:message])
if @message.save
flash[:notice] = "The message was saved successfully"
redirect_to action: "index"
else
render "new"
end
end
end
当我进行测试时:
测试通过响应。
it "renders the new template" do
response.should render_template("new")
end
测试也通过主题。
it "renders the new template" do
subject.should render_template("new")
end
测试也通过页面
it "renders the new template" do
page.should render_template("new")
end
测试ALSO通过 NOTHING
it "renders the new template" do
should render_template("new")
end
如果它帮助任何人做出正面或反面,config/routes.rb
只有 resources :messages
为什么所有这些测试都通过了?我实际测试的是什么? “页面”,“主题”和“仅仅是响应的同义词”吗?
只要我的测试通过,它是否重要?
答案 0 :(得分:1)
默认情况下,主题将引用该类,即MessagesController。
在上一个测试示例中未定义主题,将隐式将主题设置为MessagesController。
答案 1 :(得分:0)
从binding.pry中看来,主题是控制器类的实例:
[2] pry(#<RSpec::ExampleGroups::MyController::DescribeString::ContextString>)> subject.is_a? Class
=> false
[3] pry(#<RSpec::ExampleGroups::MyController::DescribeString::ContextString>)> subject.is_a? Users::SessionsController
=> true