嗨,我正在尝试编写一些Rspec测试并且稍微挣扎。
我有一个列出交易的索引页面,我创建了一个搜索框,让您按ID或用户名或用户电子邮件查找交易。
现在我正在尝试编写规范以确保在传入查询时搜索有效。这是控制器操作的相关部分:
def index
@title = "Payments"
if params[:query]
@payments = Payment.text_search(params[:query])
else
这是我尝试编写相关测试: (编辑搜索在浏览器中有效,但我正在尝试编写一些规范,而且只是对rspec很新,所以不确定正确的方法是什么。)
it "payments search works with a query" do
user = FactoryGirl.create(:user, name: 'Space Cat', email: 'foo@bar.com')
login_to_admin
get :index, :query => 'space cat'
response.status.should == 200
response.body.should match(/foo@bar.com/)
response.body.should include(user)
end
任何提示?
答案 0 :(得分:3)
控制器规范应该只检查预期会发生什么:
let(:query) { 'space cat' }
let(:search_result) { double 'search_result', :paginate => [] }
before do
login_to_admin
end
it "payments search works with a query" do
Payment.should_receive(:text_search).with(query).and_return search_result
get :index, :query => query
expect(assigns(:payments)).to eq []
end
你的错误是:
取决于具体实施:您必须在型号规范中指定Payment.text_search
取决于视图:您不应该打扰如何在控制器规范中显示数据
在db中创建无用的对象:由于你以前的依赖关系,你被迫在db中创建一个没有意义且耗时的用户