我正在尝试为API编写RSpec测试。
设置: 为了保持一致,我们有一个格式化函数,它接受响应并创建一个漂亮的JSON对象,所以一切都是一致的。例如,这个例子简化了:
def format (status, message)
{status: status,
message: message}
end
此函数在所有API控制器继承的基本控制器中声明。
我想要的是什么: 当我测试API控制器时,我想测试控制器给我预期的结果,但我不想测试JSON响应的实际格式。在中,我想检查传递给格式函数的参数是否符合我的预期,但我不想检查该函数实际返回的内容。 (我打算在另一个测试中测试该功能。如果对JSON格式的更改不影响API的每个测试,我真的很喜欢它。如果这不是好的做法,请随时告诉我。 )
我的问题: 我有什么方法可以从当前API规范文件中的基本控制器访问该格式函数吗?或者有一个很好的方法让我把它删除并获取传递给它的参数,以便我可以检查它们是否正确?
答案 0 :(得分:1)
听起来你正试图在你的控制器规范中做这样的事情:
let(:status) { function1(params_hash) }
let(:message { function2(params_hash) }
it "does something something" do
model.should_receive(:format).with(status, message)
get :action, params_hash
end
定义如何从params_hash计算状态和消息取决于您。我所做的是考虑各种路径是什么,并为每个路径编写测试。如:
context "when id is missing in the params" do
let(:status) { 404 }
let(:message) { "Not found" }
let(:params_hash) { {:id => nil} }
context "when id is correct" do
let(:status) { 200 }
let(:message) { "OK" }
let(:params{hash) { {:id => 1 } }