【发布时间】:2012-06-02 15:41:10
【问题描述】:
在我所有的 ruby on rails 应用程序中,我尽量不在控制器中使用数据库,因为它们应该独立于持久性类。我用 mocking 代替。
这是 rspec 和 rspec-mock 的示例:
class CouponsController < ApplicationController
def index
@coupons = Coupon.all
end
end
require 'spec_helper'
describe CouponsController do
let(:all_coupons) { mock }
it 'should return all coupons' do
Coupon.should_receive(:all).and_return(all_coupons)
get :index
assigns(:coupons).should == all_coupons
response.should be_success
end
end
但是如果控制器包含更复杂的作用域,比如:
class CouponsController < ApplicationController
def index
@coupons = Coupon.unredeemed.by_shop(shop).by_country(country)
end
end
你知道测试类似作用域链的好方法吗?
我认为下面的测试看起来不太好:
require 'spec_helper'
describe CouponsController do
it 'should return all coupons' do
Coupon.should_receive(:unredeemed).and_return(result = mock)
result.should_receive(:by_shop).with(shop).and_return(result)
result.should_receive(:by_country).with(country).and_return(result)
get :index
assigns(:coupons).should == result
response.should be_success
end
end
【问题讨论】:
标签: ruby-on-rails testing scope mocking stub