That should have been "there is _no_ `activities_attributes` method to
begin with".

On Mon, Mar 25, 2013 at 7:55 AM, [email protected]
<[email protected]> wrote:
> Another shot in the dark:
>
> My guess is that there is `activities_attributes` method to begin with and
> Rails generates it for you the first time it is called. By setting
> timesheet.activities_attributes = {}, you're assigning a value to a
> previously non-existent variable that is not used internally in validations.
>
> Part of the problem here, IMO, is an overuse of "reuse". You're creating a
> valid instance and then changing its state in order to make it invalid. I
> think it would be easier to understand if you created an invalid instance,
> e.g.
>
> describe Timesheet do
>   it "is invalid when any of its activities has no tasks" do
>     timesheet = Timesheet.new
>     timesheet.activities << Activity.new
>     expect(timesheet).not_to be_valid
>   end
> end
>
> You can do that using subject and/or before if you like, but this is very
> explicit and easy to reason about as/is.
>
> On Monday, March 25, 2013 7:39:12 AM UTC-5, Dan Brooking wrote:
>>
>> Just a shot in the dark as I'm not a rails expert... But it doesn't look
>> like your code required timesheet to have activities_attributes?
>>
>> Do you need to add this:
>>   validates :activities_attributes, presence: true
>>
>> to the model?
>>
>> On Monday, March 25, 2013, Javix wrote:
>>>
>>>
>>>>
>>>> Please post the failure message.
>>>
>>>
>>> describe "when activities attributes is empty" do
>>>     before { @timesheet.activities_attributes = {} }
>>>     it { should_not be_valid }
>>>   end
>>> ...
>>>
>>> Output:
>>>
>>>  when activities attributes is empty
>>>     should not be valid (FAILED - 1)
>>> ...
>>>
>>> Failures:
>>>
>>>   1) Timesheet when activities attributes is empty
>>>      Failure/Error: it { should_not be_valid }
>>>        expected valid? to return false, got true
>>>      # ./spec/models/timesheet_spec.rb:39:in `block (3 levels) in <top
>>> (required)>'
>>>
>>> Finished in 2.69 seconds
>>> 45 examples, 1 failure
>>>
>>> Failed examples:
>>>
>>> rspec ./spec/models/timesheet_spec.rb:39 # Timesheet when activities
>>> attributes is empty
>>>
>>> The only way I found for the moment is to build a timesheet with ONe and
>>> the only activity, then setting its task to nil as follows:
>>>
>>> describe "when the task is not present" do
>>>     before  { @timesheet.activities.first.task = nil }
>>>     it { should_not be_valid }
>>>   end
>>>
>>> Far from being perfect, agreed. So any idea would be really appreciated.
>>> Thanks and regards
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "rspec" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an
>>> email to [email protected].
>>> To post to this group, send email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msg/rspec/-/18oHzvGc1GYJ.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rspec/-/pGAJvG4SkiMJ.
>
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to