Search code examples
ruby-on-railsrubyrspecrspec-rails

Find last created record RSpec test


How could I write a test to find the last created record?

This is the code I want to test:

Post.order(created_at: :desc).first

I'm also using factorybot


Solution

  • If you've called your method 'last_post':

    def self.last_post
      Post.order(created_at: :desc).first
    end
    

    Then in your test:

    it 'should return the last post' do
      expect(Post.last_post).to eq(Post.last)
    end
    

    On another note, the easiest way to write your code is simply

    Post.last
    

    And you shouldn't really be testing the outcome of ruby methods (you should be making sure the correct ruby methods are called), so if you did:

    def self.last_post
      Post.last
    end
    

    Then your test might be:

    it 'should send the last method to the post class' do
       expect(Post).to receive(:last)
       Post.last_post
    end
    

    You're not testing the outcome of the 'last' method call - just that it gets called.