从rails应用程序代码运行rspec

时间:2011-10-05 12:28:47

标签: ruby-on-rails rspec

我遇到了需要验证一些正则表达式的情况。

因此,在我的应用程序运行期间,我可能想测试一个特定的正则表达式:

  1. 不包含空格
  2. 仅包含一定数量的捕获组
  3. 不使用某些字符
  4. 仅包含一定数量的通配符
  5. rspec似乎是完成这项工作的完美工具。我意识到它通常用于在运行应用程序之前测试应用程序接口,假设和逻辑。但是,结合自动报告输出的自然语法将是很好的。

    问题: 这是否适合使用rspec?

    如何从正在运行的应用程序中调用描述?

    或者,我应该放弃这种方法,只是在我的班级中编写方法来执行验证吗?

3 个答案:

答案 0 :(得分:1)

以这种方式使用rspec是非常气馁和不寻常的。您应该将测试代码留在Gemfile中的:test组中,而不是在您的应用程序中引用它。

相反,请使用您的字段与正则表达式格式匹配的rails验证,然后在rspec中编写测试以验证您的验证。

答案 1 :(得分:0)

这绝对是新事物:在rails中使用rspec进行验证。但是对于特定问题,人们倾向于建议使用DSL,因此rspec是一种可能非常适合您工作的DSL。

如果是这样的话:为什么不呢,是的,继续。要有创意,并找到使用所用工具的新方法。

只是一个小小的警告:从你标记的几个点来看,复杂性似乎并不太大,所以请确保你没有使用火箭筒杀死一只苍蝇。 Rspec是一个非常强大的工具,在rails过程中运行rspec可能并不完全是直截了当的。

答案 2 :(得分:0)

如果要生成报告,可以使用全局after(:all){puts“report goes here”}或after(:each)。如果您希望某些数据炸毁您的测试,则可以测试.should raise_exception。我想你会编写大量的异常处理来保持输出的预期失败。将结果记录到数据库或文件也可能很烦人。如果可以,请描述您对数据进行的测试,然后在最后解析rspec的输出。

class Car
  attr_accessor :doors
end

describe "Car" do

  it "should have doors" do
    Car.new.should respond_to(:doors)
    fail("failing intentionally")
  end

  it "should pass this easily" do
    Car.new should_not be nil
  end

  after(:all) { puts "report here" }
end

您可以在下面看到我对测试失败的描述。

$ rspec rspec_fail.rb
F.report here

Failures:

  1) Car should have doors
     Failure/Error: fail("failing intentionally")
     RuntimeError:
       failing intentionally
     # ./rspec_fail.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0.00052 seconds
2 examples, 1 failure

如果这是测试文本和正则表达式,我会很容易报告失败。 Failure/Error: fail("Data has spaces")等。