使用rspec测试rails控制器

Mic*_*dry 4 ruby rspec ruby-on-rails

我是rails的新手,我正在尝试使用rspec测试控制器.我的第一个测试是在调用show动作时,它应该通过url查找Category.

问题是当我添加存根代码时,我收到以下错误:

未定义的方法`find'for#

我的测试看起来像这样:

require 'spec_helper'

describe CategoriesController do
    describe "GET /category-name/" do
        before(:each) do
            @category = mock_model(Category)
            Category.stub!(:find).with(:first, :conditions => ["url = :url", {:url => "category-name"}]).and_return(@category)
        end

        it "should find the category by url" do
            controller.show
            Category.should_receive(:find).with(:first, :conditions => ["url = :url", {:url => "category-name"}]).and_return(@category)
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

now*_*owk 10

您对该请求的调用应该在任何之后should_receive.这是一件紧张的事情.所以它有点像这样,"类别应该收到一些东西,当这种情况发生时 "."发生这种情况"是指请求.

it "should find the category by url" do
  Category.should_receive(:find).with... 
  get "show", { your params, if you're sending some in }
end
Run Code Online (Sandbox Code Playgroud)

此外,您希望至少在此特定测试中使用调用控制器方法本身的请求方式.

所以

post   "action_name"
get    "action_name"
update "action_name"
delete "action_name"
Run Code Online (Sandbox Code Playgroud)

代替

controller.action_name
Run Code Online (Sandbox Code Playgroud)