Note that there are some explanatory texts on larger screens.

plurals
  1. POrails test makes Mysql2 complain about default value
    primarykey
    data
    text
    <p>I'm pretty confused about an error I get trying to unit test a model (User) I have. I have a fixture for the model in test/fixtures/users.yml</p> <pre><code>new_user_in_unavailable_country: first_name: John last_name: Lennon email: john.lennon@pop.co.uk password: YokoOn0 country: UNITED KINGDOM </code></pre> <p>Now in test/unit/user_test.rb I have</p> <pre><code>require 'test_helper' class UserTest &lt; ActiveSupport::TestCase test "status_auto_fill_for_unavailable_country" do users(:new_user_in_unavailable_country).valid? assert users(:new_user_in_unavailable_country).status == "SUBSCRIBED" end end </code></pre> <p>So far so good. Now, here is what that generates upon rake:test:units :</p> <pre><code> Error: test_status_auto_fill_for_available_country(UserTest): ActiveRecord::StatementInvalid: Mysql2::Error: Field 'name' doesn't have a default value: INSERT INTO `countries` (`id`) VALUES (980190962) </code></pre> <p>Okay, if there is an hidden insert somewhere into table countries (which I never asked for!), I should be able to see that upon running the same code in a rails console. So I tried:</p> <pre><code>&gt; usr = User.new(:first_name =&gt; "John", :last_name =&gt; "Lennon", :email =&gt; "john.lennon@pop.co.uk", :password =&gt; "YokoOn0", :country =&gt; "UNITED KINGDOM") #&lt;User id: nil, first_name: "John", last_name: "Lennon", email: "john.lennon@pop.co.uk", hashed_password: nil, password_salt: nil, created_at: nil, updated_at: nil, organization_id: nil, country: "UNITED KINGDOM", status: nil&gt; &gt;&gt; usr.valid? (1.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (1.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (0.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (1.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (0.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (0.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (0.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (0.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' (0.0ms) SELECT COUNT(*) FROM `countries` WHERE `countries`.`available` = 1 AND `countries`.`name` = 'UNITED KINGDOM' User Exists (1.0ms) SELECT 1 FROM `users` WHERE `users`.`email` = BINARY 'john.lennon@pop.co.uk' LIMIT 1 true &gt;&gt; usr.status "SUBSCRIBED" </code></pre> <p>Okay, no insertion into countries table.</p> <p>Anyidea of what happens behind the scene that I am missing and that generates this error?</p> <pre><code>Create Country migration: class CreateCountries &lt; ActiveRecord::Migration def change create_table :countries do |t| t.string :name , :null =&gt; false t.string :iso_2_letters_code , :null =&gt; false t.string :iso_3_letters_code , :null =&gt; false t.integer :phone_code end add_index :countries , :iso_2_letters_code , :unique =&gt; true add_index :countries , :iso_3_letters_code , :unique =&gt; true end end </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload