开发者

Running rspec from rails application code

I've got a situation where I need to validate some regular expressions.

So, during my application run, I may want to test that a particular regex:

  1. Contains no spaces
  2. Contains only a certain number of capture groups
  3. Does not use certain characters
  4. Only contains a certain number of wildcards

rspec seems like the perfect tool for doing this. I realize that it's typically used to test application interfaces, assumptions and logic before an application is run, howeve开发者_运维知识库r. But, the natural syntax combined with the automatic reporting output would be nice to have.

Questions: Is this an appropriate use of rspec?

How can one call a description from within a running application?

Or, should I abandon this approach and simply write methods within my class to perform the validations?


Using rspec in this way is highly discouraged and unusual. You should leave testing code in a :test group in your Gemfile and not reference it in your app.

Instead, use rails validations that your field matches a regex format, and then write tests in rspec to verify your validations.


This is definitely something new: using rspec inside rails for validation. But for specific problems one tends to propose to use a DSL, and as such rspec is a DSL which might just perfectly suited for your job.

So if that is the case: why not, yes, go ahead. Be creative and find new ways to use the tools you have.

Just a small warning: from the few points you marked, the complexity does not seem to be too big, so make sure you are not using a bazooka to kill a fly. Rspec is a big and very powerful tool, tying in rspec to run during the rails process might not be entirely straightforward.


If you want to generate a report, you could use the global after(:all) { puts "report goes here" } or after(:each). If you expect some of your data to blow up your tests, you can test for .should raise_exception. I imagine you'd be writing lots of exception handling to keep the expected failures out of the output. Logging the results to a database or a file might also be annoying. If you can, describe the test that you are doing on the data and then just parse the output of rspec at the end.

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

You can see below that I have a description of the test that failed.

$ 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

I would be easy enough to just make a report of the failures if this was testing text and regex's. Failure/Error: fail("Data has spaces") etc.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜