0

我一直在寻找一段时间,并没有找到关于 RoR 中测试结构的明确解释。(我正在学习 Michael Hartl 的书)。

  1. 由于我使用 rspec 进行测试,我还需要保留“test”文件夹吗?
  2. “spec”文件夹结构是否严格分配给特定的测试目的?
  3. “生成”测试脚本时,除了创建脚本文件之外,它还会做其他事情吗?(即我可以手动创建它吗?)

第二个问题来自这个错误:

undefined method `visit' for #<RSpec::Core::ExampleGroup: ...

一旦我的非常简单的测试文件不在 /spec/requests 中(但在 /spec/views 中),就会发生这种情况:

require 'spec_helper'

describe "Home page" do

  subject { page }

###1
  describe "title" do
    before { visit root_path }

    it { should have_selector('h1',    text: 'Welcome') }
    it { should have_selector('title', text: 'Home') }

  end
end
4

3 回答 3

2

1)不,您不需要该test文件夹。只有spec,除非您使用的是 Test::Unit。

2)您可以随意订购spec。一般建议的格式是

spec/
  controllers/
  views/      
  models/ 
  lib/ #Only if you have stuff in lib you need to test    
  spec_helper.rb

名称如spec/controllers/items_controller_spec.rb, 和spec/models/item_spec.rb

3)我不确定你的意思。对于 RSpec,您只需要创建一个使用其语法的文件来测试您的 Ruby 代码的某些部分。它不会创建脚本——你会。

关于您的最后一个问题visit

似乎您正在尝试使用Capybara方法 ( visit)。Capybara 负责在浏览器中访问您的网站,而不是 RSpec。

于 2013-03-06T22:14:37.560 回答
1
  1. 不,我的理解是该test文件夹通常用于 Test::Unit 的东西。您可以删除或保留它;离开它并没有什么坏处。
  2. 他们希望您以一种非常具体的方式组织这些东西。例如,如果您有app/models/user.rb,您的规范应该在spec/models/user_spec.rb.
  3. 除了创建测试脚本之外,我不知道它还能做什么。你完全可以手工制作,我一直都在做。
于 2013-03-06T22:16:33.087 回答
1
  1. 见下文
  2. 不,只创建文件

您需要使用一种特定的文件夹结构来运行 Capybara 验收测试。这些是其中包含“访问”的测试

水豚1.0

spec/requests

水豚2.0

spec/features
于 2013-03-06T22:21:20.753 回答