[rspec-users] rspec model testing - test on user defined validation- How do I test that the create failed.

Pat Maddox pergesu at gmail.com
Fri Jan 16 11:00:44 EST 2009


On Fri, Jan 16, 2009 at 3:29 AM, Ken Wegener <kgwcoach at yahoo.com> wrote:
>
> I'm new to rspec and looking for way to test a validation I added to a model.
>
> The test checks to see that if field1 has a value then field2 must be nil
> and vice versa.
>
> -------------------------------
> When I did the rspec_scaffold it generated one test which worked
>
> before :each do
>  @valid_attributes = {
>    :field1 = "value for field1"
>    :field2 = "value for field2"
>   }
>
>  MyTest.create!(@valid_attributes)
> end
>
> it "should create a new instance given valid attributes" do
>  MyTest.create!(@valid_attributes)
> end
>
> ---------------------------------
> Before coding I modified the test file as follows
>
> it "should create a new instance given valid attributes" do
>
> @valid_attributes1 = {
>    :field1 = "value for field1"
>    :field2 = nil
>   }
>
> MyTest.create!(@valid_attributes1)
>
>  @valid_attributes2 = {
>    :field1 = nil
>    :field2 = "value for field2"
>   }
>
>  MyTest.create!(@valid_attributes2)
> end
>
> it "should not create a new instance given incompatible attribute values" do
>
> @invalid_attributes1 = {
>    :field1 = "value for field1"
>    :field2 = "value for field2"
>   }
>
> MyTest.create!(@invalid_attributes)   # I don't know how to test that the
> save failed!!
> end
>
> naturally the first two test failed and the last one as written didn't.
>
> after coding my validation the first two pass and naturally last one didn't.
>
> How do I test that the create failed.
> --
> View this message in context: http://www.nabble.com/rspec-model-testing---test-on-user-defined-validation--How-do-I-test-that-the-create-failed.-tp21465687p21465687.html
> Sent from the rspec-users mailing list archive at Nabble.com.
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>

Hi Ken,

I would write the specs like:

describe MyModel do
  it "should be valid when field1 is set and field2 is nil" do
    new_my_model(:field1 => "foo", :field2 => nil).should be_valid
  end

  it "should be valid when field2 is set and field1 is nil" do
    new_my_model(:field1 => nil, :field2 => "bar").should be_valid
  end

  it "should not be valid when field1 and field2 are set" do
    new_my_model(:field1 => "foo", :field2 => "bar").should_not be_valid
  end
end

new_my_model is coming from fixjour [1], but you could just use
MyModel.new if you want.  The key is that you get a new instance with
the attributes set as you want and then ask it if it's valid.

[1] http://github.com/nakajima/fixjour/tree/master


More information about the rspec-users mailing list