我遇到了需要验证一些正则表达式的情况。
因此,在我的应用程序运行期间,我可能想测试一个特定的正则表达式:
rspec似乎是完成这项工作的完美工具。我意识到它通常用于在运行应用程序之前测试应用程序接口,假设和逻辑。但是,结合自动报告输出的自然语法将是很好的。
问题: 这是否适合使用rspec?
如何从正在运行的应用程序中调用描述?
或者,我应该放弃这种方法,只是在我的班级中编写方法来执行验证吗?
答案 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")
等。