23

我正在尝试学习rspec。我似乎无法测试 rails 控制器方法。当我在测试中调用方法时,rspec 只是返回一个未定义的方法错误。这是我的测试示例

it 'should return 99 if large' do
  GamesController.testme(1000).should == 99
end

这是错误:

 Failure/Error: GamesController.testme(1000).should == 99
 NoMethodError:
   undefined method `testme' for GamesController:Class

我在 GamesController 中有一个 testme 方法。我不明白为什么测试代码看不到我的方法。

任何帮助表示赞赏。

4

2 回答 2

39

我认为正确的方法是这样的:

describe GamesController do
  it 'should return 99 if large' do
    controller.testme(1000).should == 99
  end
end

在 Rails 控制器规范中,当您将控制器类放入时describe,您可以使用controller方法获取实例:P
显然,如果testme方法是私有的,您仍然必须使用controller.send :testme

于 2013-09-22T18:59:46.450 回答
7

您尝试测试类方法,但控制器具有实例方法

你需要GamesController.new.testme(1000).should == 99

甚至GamesController.new.send(:testme, 1000).should == 99,因为我认为这不是操作方法,而是私有或受保护的。

动作方法是这样测试的

于 2012-04-07T05:07:19.397 回答