Populating instance variables in rspec tests

11,812

This doesn't sound like a correct practice. Rspec should be testing the interface behavior of your classes and models - not the internal implementation (of which instance variables undoubtedly are). There are ways to do this, but are you sure you don't want to have an accessor for that variable?

Anyhow, you can use my_object.instance_variable_get("@my_var") and my_object.instance_variable_set("@my_var", value) to manipulate the variable.

Share:
11,812
Joseph Le Brech
Author by

Joseph Le Brech

Rails Dev

Updated on July 08, 2022

Comments

  • Joseph Le Brech
    Joseph Le Brech almost 2 years

    I have a class which has the following initialise method.

    def initialize(my_var)
      @my_var = my_var
    end
    

    and I want to test the method which then does something to @my_var

    def split
      @my_var.split(",")
    end
    

    how do I change @my_var before testing that it returns an array properly?

    Is this possible without having an accessor for @my_var?

  • Joseph Le Brech
    Joseph Le Brech over 11 years
    the reason i'm doing this is that my initialize method is reading from file, what I'm trying to do is stub File and write the expected processed data from that file without needing a file to support my tests. I can then skip that initialize method for testing any other methods in my class.
  • faron
    faron over 9 years
    @JosephLeBrech, you can also try using StringIO instead of file