I’m unable to get nested attributes in fixtures to work with Rspec.
The models and fixtures function fine outside of rspec, but I get a
mysql error (Unknown column "_attributes) when running
tests with the same fixtures.
I am able to get the specs to run by creating a separate fixture for
the nested table. Shouldn’t Rspec handle nested attributes in
fixtures, though?
I’m unable to get nested attributes in fixtures to work with Rspec.
The models and fixtures function fine outside of rspec, but I get a
mysql error (Unknown column "_attributes) when running
tests with the same fixtures.
I am able to get the specs to run by creating a separate fixture for
the nested table. Shouldn’t Rspec handle nested attributes in
fixtures, though?
The only fixture support provided by RSpec are hooks into the Rails
configuration to tell it where fixtures are stored, whether to use
instantiated fixtures, and whether to use transactions around each
example. There is no specific support for fixture loading - that all
comes from Rails.
That said, maybe we can help you, but you’ll need to provide some more
info:
rspec version
rails version
spec code
implementation code
full failure message
Code and failure messages are fine in email or in gists.
I haven’t used fixtures myself in a couple of years, and never used
nested attributes. Does anyone else on the list have any advice to
offer about this?
I appreciate the quick response! Sorry for the delay. The relevant
code is attached. Our model’s name is Scale, which has_many
ScaleElements.
We’re loading fixtures in specs with config.fixture_path =
“#{::Rails.root}/spec/fixtures”
Nested attributes don’t work (although they do outside of Rspec in
Rails), and we’re currently solving the problem by creating a
scale_elements.yml fixture and not nesting attributes.
Figured this out. Our fixtures outside Rspec are actually being used to
create instances of ActiveRecord models. AR supports
accepts_nested_attributes_for, but the Rspec fixtures bypass AR and
simply attempt to set database values.
By “fixtures outside Rspec”, I was referring to files in our db/fixtures
directory, which I assumed were fixtures. On further investigation, I
found these files are actually being used by some custom ‘seeding’ code
a coworker of mine wrote. The seeding is reading the fixtures and
creating AR objects, so they aren’t actually fixtures. This is how
accepts_nested_attributes is working - fixtures don’t appear to support
that out of the box.
Also, when I said Rspec fixtures, I meant the files in spec/fixtures.
In short, never mind - this really has nothing to do with Rspec
I appreciate the quick responses.
Figured this out. Our fixtures outside Rspec are actually being used to
create instances of ActiveRecord models. AR supports
accepts_nested_attributes_for, but the Rspec fixtures bypass AR and
simply attempt to set database values.
There are no “RSpec fixtures,” so I don’t really understand what you
mean here. The only thing RSpec does with regard to fixtures is expose a
couple of configuration bits in the RSpec.configure block. The rest is
all managed by the Rails’ testing framework.
What do you mean “our fixtures outside rspec”?
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.