ruby - 如何使用由另一种方法填充的属性

时间:2014-03-15 22:38:10

标签: ruby rspec stub

我有测试,我已经用

删除了一个对象属性
dictionary.stub(:words).and_return
(%w{cat,dog,fish,plane,rock,dig,dug,cut,cuts,put,puts,putting,ruby,use,GO,IT})

这样我就不必使用Dictionary.load_system_dictionary方法填充@words,我可以简单地删除words方法。

现在我想测试另一个名为contains_word(word)的方法:

def contains_word(word)
  @words.map(&:upcase).join.include?(word.upcase)
end

但问题是@words通常由Dictionary.load_system_dictionary方法填充,但我不想使用它,因为它有90k记录,但没有它File.open(words_file).each {|word| @words << word} { {1}}我的@words attr未被填充。

如果我这样做

dictionary.load_system_dictionary 

对于真实字典,测试通过了 但如果我用

替换它
dictionary.stub(:words).and_return
(%w{cat,dog,fish,plane,rock,dig,dug,cut,cuts,put,puts,puttingzaq1,ruby,use,GO,IT})

我得到了

Failure/Error: expect(dictionary.contains_word('IT')).to be true

expected #<TrueClass:2> => true
got #<FalseClass:0> => false

btw字典最初设置为

let(:dictionary) {Dictionary.new}

1 个答案:

答案 0 :(得分:1)

如果contains_wordDictionary方法,您可以这样做

dictionary.instance_variable_set(:@words, your_words_array)

More info关于instance_variable_set