I have a question on how to use rspec to mock a file input. I have a following code for the class, but not exactly know a why to mock a file input. filepath is /path/to/the/file
I did my search on Google and usually turns out to be loading the actual file instead of mocking, but I’m actually looking the opposite where only mock, but not using the actual file.
module Service
class Signing
def initialize(filepath)
@config = YAML.load_file(filepath)
raise "Missing config file." if @config.nil?
end
def sign() …
end
private
def which() …
end
end
end
Is it possible to use EOF delimiter for this file input mocking?
file = <<EOF
A_NAME: ABC
A_ALIAS: my_alias
EOF
You could stub out
YAML.load_fileand return parsed YAML from your text, like this:This doesn’t quite stub out the file load itself, but to do that you’d have to make assumptions about what YAML.load_file does under the covers, and that’s not a good idea. Since it’s safe to assume that the YAML implementation is already tested, you can use the code above to replace the entire call with your parsed-from-text fixture.
If you want to test that the correct filename is passed to
load_file, replace the stub with an expectation: