使用RSpec测试Rails Metal/Rack?

3

假设我有一个名为Preview的Metal类,我该如何使用Rspec进行测试?

当我尝试运行以下代码时:

require 'spec_helper'

describe Preview do

  it "should return the posted content" do
    post "/preview", :content => "*title*"
    response.body.should == "*title*"
  end

end

I get:

undefined method `post' for #<ActiveSupport::TestCase::Subclass_1:0x1058b3098>

看起来如果测试不是明确为控制器的话,RSpec就不会加载:post方法。尽管我已经尝试了指定:type => :controller,但并没有用。

3个回答

6

rspec有整合测试(specs)可以包装rails的整合测试,这些整合测试通过rack来执行。只需要将这个spec放在./spec/integration/preview_spec.rb中即可。


太好了。这个方法在哪里写过?感谢 RSpec 和你的所有工作,David。 - Matt Darby
David,Rails 3有没有改变这个问题,还是我做错了?我通过重写ActionDispatch::ShowExceptions来捕获中间件中的异常,但是我的集成测试(即使我把它们放在./spec/integration/中)仍然无法捕获异常。 - Steven

1

我认为最好使用rack/test进行测试


看起来不错,但我不想再使用另一个测试套件/宝石来测试一个路由。我相信你理解我的意思。 - Matt Darby

0
现在(rspec-rails 2.2.0 和 rails 3),您可以使用请求规范来实现:

根据readme文件所述:

请求规范位于spec/requests中

[...]

请求规范混合了Rails集成测试的行为。有关更多信息,请参见ActionDispatch :: Integration :: Runner的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接