Я выполняю этот вызов, но я застрял на чем-то, что до сих пор не смог понять. Я также обнаружил, что открытая тема очень похожа на эту, но она находится на той же стадии, на которой я сейчас нахожусь, и «rspec» говорит, что с моим кодом все еще что-то не так.
Ниже есть вызов:
Напишите программу, которая хранит список задач. Стоит:
- Есть два класса:
Todo
- Имеет два метода:
initialize
: создает новый объект todo. Принимает строку как
параметр и сохраняет его в объекте todo.
text
: не принимает параметров. Возвращает строку, которая была
сохраняется при создании объекта todo.
TodoList
- Имеет три метода:
initialize
: Создает новый объект списка задач. Не принимает параметров.
add
: принимает объект todo в качестве параметра. Хранит его на
объект списка задач.
print
: не принимает параметров. Создает строку всех
сохраненные задачи, по одному в строке. Каждая строка должна начинаться с
*
. puts
это строка.
например
- получить молоко
- получить документы
ЗДЕСЬ МОЙ КОД:
class Todo
def initialize(string)
@string = string
end
def text
@string
end
end
class TodoList
def initialize
@todolist = []
end
def add(todo)
@todolist << Todo.new(todo)
end
def print
@todolist.each do |item|
puts "* get #{item.text}"
end
end
end
Вот ошибка, которую я получаю:
Failure/Error: expect { todo_list.print }.to output("* get
milk\n").to_stdout
expected block to output "* get milk\n" to stdout, but output "* get #<Todo:0x007f8766831f90>\n"
Diff:
@@ -1,2 +1,2 @@
-* get milk
+* get #<Todo:0x007f8766831f90>
# ./spec/question_1_spec.rb:43:in `block (5 levels) in <top (required)>
Вот код спецификации:
describe "Q1. Todo list" do
describe Todo do
describe "creating a new Todo" do
it "creates a new todo object" do
expect(Todo.new("get milk")).to be_instance_of Todo
end
end
describe "getting text on todo" do
it "returns text stored on todo" do
expect(Todo.new("get milk").text).to eq("get milk")
end
end
end
describe TodoList do
describe "creating a TodoList" do
it "creates a new todo list object" do
expect(TodoList.new).to be_instance_of TodoList
end
end
describe "adding todos" do
let(:todo) { Todo.new("get milk") }
let(:todo_list) { TodoList.new }
it "adds a todo without raising an error" do
expect { todo_list.add(todo) }.to_not raise_error
end
end
describe "printing todos" do
let(:todo) { Todo.new("get milk") }
let(:todo_list) { TodoList.new }
context "one todo" do
it "prints a single todo with a bullet point" do
todo_list.add(todo)
expect { todo_list.print }.to output("* get milk\n").to_stdout
end
end
context "many todos" do
let(:todo_1) { Todo.new("get milk") }
let(:todo_2) { Todo.new("get the paper") }
let(:todo_3) { Todo.new("get orange juice") }
let(:todo_list) { TodoList.new }
let(:expected_output) { ["* get milk",
"* get the paper",
"* get orange juice"].join("\n") +
"\n" }
it "prints the todos, separated by newlines" do
todo_list.add(todo_1)
todo_list.add(todo_2)
todo_list.add(todo_3)
expect { todo_list.print }.to output(expected_output).to_stdout
end
end
end
end