Forum: Ruby on Rails rake test:units error because not null constraint.

Posted by Msan Msan (msan)
on 2012-11-18 20:44
(Received via mailing list)
Hello.
I have this unit test:

test "User validations" do
  user = User.new
  assert user.invalid?
  assert user.errors[:uid].any?
  assert user.errors[:name].any?
  assert user.errors[:role].any?
end

When I run it I have this error:

null value in column "uid" violates not-null constraint: INSERT INTO
"users" ("created_at", "updated_at", "id") VALUES ('2012-11-18
19:37:39', '2012-11-18 19:37:39', 298486374).
In the fixture user I've put:

one:
  uid: "xxx.xxx"

Why the unit test got the error?
Thank you.
Posted by Colin Law (Guest)
on 2012-11-18 21:26
(Received via mailing list)
On 18 November 2012 19:42, Mauro <mrsanna1@gmail.com> wrote:
>
> Why the unit test got the error?
Is it only that test that gives the problem or does it happen when you
run any test?  If it was a problem with the fixture then it will
happen whatever test you run, I think.

I don't think that it is necessary to include quotes in the fixture
file but I would not expect that to cause the problem.

What happens if you empty the users fixtures file?

Colin
Posted by Jordon Bedwell (Guest)
on 2012-11-18 22:25
(Received via mailing list)
On Sun, Nov 18, 2012 at 1:42 PM, Mauro <mrsanna1@gmail.com> wrote:
> Hello.
> I have this unit test:
>
> test "User validations" do
>   user = User.new
>   assert user.invalid?
>   assert user.errors[:uid].any?
>   assert user.errors[:name].any?
>   assert user.errors[:role].any?
> end

You should probably move each of those assertions to a test of their
own using contexts.

describe User do
  context "Validations"
    it "should have an error on blah"
  end
end

But you can make those kind of tests mad easy by just using should
matchers then it comes down to something so simple you never forget to
properly do it:

describe User do
  it { should validate_presence_of(:name) }
end

>
> When I run it I have this error:
>
> null value in column "uid" violates not-null constraint: INSERT INTO
> "users" ("created_at", "updated_at", "id") VALUES ('2012-11-18
> 19:37:39', '2012-11-18 19:37:39', 298486374).
> In the fixture user I've put:
>
> one:
>   uid: "xxx.xxx"

If I remember right you should be doing users(:one) instead of
User.new but I'm not so sure on that subject 100% because I haven't
played with Fixtures since the day after I started learning Rails and
discovered factory_girl.
Posted by Msan Msan (msan)
on 2012-11-19 12:16
(Received via mailing list)
On 18 November 2012 21:24, Colin Law <clanlaw@googlemail.com> wrote:
>> end
>>
>> Why the unit test got the error?
>
> Is it only that test that gives the problem or does it happen when you
> run any test?  If it was a problem with the fixture then it will
> happen whatever test you run, I think.
>
> I don't think that it is necessary to include quotes in the fixture
> file but I would not expect that to cause the problem.
>
> What happens if you empty the users fixtures file?

same thing.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.