Насмешка RSpec: каждый блок

Вы можете использовать range

Например:

data=[]

for _ in range(2):
    name = raw_input("Please enter your name: ")
    age = int(raw_input("Please enter your age: "))
    height = int(raw_input("Please enter your height: "))
    data.append((name, age, height))
print(data)
<час>

Или: , используя цикл while.

data=[]

while True:
    name = raw_input("Please enter your name: ")
    age = int(raw_input("Please enter your age: "))
    height = int(raw_input("Please enter your height: "))
    data.append((name, age, height))

    if len(data) == 2:
        break

print(data)
8
задан 3 revs, 2 users 100% 6 February 2016 в 23:57
поделиться

3 ответа

У меня нет компьютера с Ruby & RSpec доступным для проверки этого, но я подозреваю, что необходимо добавить вызов к and_yields звоните [1] на конце should_receive(:each). Однако Вы могли бы найти более простым не использовать насмешки в этом случае, например, Вы могли возвратить a StringIO экземпляр, содержащий linetext от File.open тупик.

[1] http://rspec.rubyforge.org/rspec/1.1.11/classes/Spec/Mocks/BaseExpectation.src/M000104.html

4
ответ дан 5 December 2019 в 10:44
поделиться

Я пошел бы с идеей заблокировать вызов File.open

lines = "RCS file: hello,v\n", "bla bla bla\n"
File.stub!(:open).and_return(lines)

Это должно быть достаточно хорошо для тестирования кода в цикле.

2
ответ дан 5 December 2019 в 10:44
поделиться

Это должно добиться цели:

describe Parser
  before do
    @parser = Parser.new
  end

  it "should extract a filename into extracted" do
    linetext = [ "RCS file: hello,v\n", "bla bla bla\n" ]
    File.should_receive(:open).with("somefile.txt").and_return(linetext)
    @parser.parse("somefile.txt")
    @parser.extracted.should == "hello"
  end
end

Существуют некоторые ошибки в классе Синтаксического анализатора (он не пройдет тест), но это - то, как я записал бы тест.

1
ответ дан 5 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: