2

我必须为我的一个功能列表页面编写集成测试用例,并且该功能索引方法具有如下代码

def index
  @food_categories = current_user.food_categories
end

现在,当我尝试为此编写测试用例时,它会引发错误

'undefined method features for nil class' because it can not get the current user

现在我要做的是在下面我在每个语句之前编写登录过程,然后为功能列表页面编写测试用例

你能告诉我我怎样才能得到current_user吗?

仅供参考,我使用了 devise gem 并使用 Rspec 处理集成测试用例

这是我的规范文件 这是我的food_categories_spec.rb

4

1 回答 1

3

更新:您混淆了功能测试和集成测试。集成测试不使用get,因为没有要测试的控制器操作,而是您必须使用visit(一些 url)。然后您必须检查页面的内容,而不是响应代码(后者用于功能测试)。它可能看起来像:

visit '/food_categories'
page.should have_content 'Eggs'
page.should have_content 'Fats and oils'

如果您需要功能测试,这里有一个例子:

# spec/controllers/your_controller_spec.rb
describe YourController do

  before do
    @user = FactoryGirl.create(:user)
    sign_in @user
  end

  describe "GET index" do

    before do
      get :index
    end

    it "is successful" do
      response.should be_success
    end

    it "assings user features" do
      assigns(:features).should == @user.features
    end
  end
end

# spec/spec_helper.rb
RSpec.configure do |config|
  #...
  config.include Devise::TestHelpers, :type => :controller
end
于 2012-04-06T06:34:16.743 回答