你好我一直在学习一门课程,以进一步了解黄瓜。该课程有点旧,所以我不得不更新一些rspec语法从应该期待,但否则一直非常小心地遵循它。我无法通过这个最近的测试,我很遗憾为什么。我收到的错误如下。我知道它应该收到95时收到零但我仍然不明白为什么。
When They submitted an assignment # features/step_definitions/teacher_grade_assignment.rb:6
Then the assignment has a grade # features/step_definitions/teacher_grade_assignment.rb:14
expected: 95
got: nil
(compared using ==)
(RSpec::Expectations::ExpectationNotMetError)
./features/step_definitions/teacher_grade_assignment.rb:15:in `/^the assignment has a grade$/'
features/teacher_can_grade_assignment.feature:11:in `Then the assignment has a grade'
Failing Scenarios:
cucumber features/teacher_can_grade_assignment.feature:7 # Scenario: Teacher can grade assignment
teacher_grade_assignment.rb
Given(/^I have a student$/) do
@teacher = Teacher.new
@student = Student.new
end
Given(/^They submitted an assignment$/) do
@teacher.submit_assignment(@student, Assignment.new)
end
When(/^I grade the assignment$/) do
@teacher.record_grade(@student, 95)
end
Then(/^the assignment has a grade$/) do
expect(@teacher.assignment_for_student(@student).grade).to eq(95)
end
student_assignment_steps.rb
Given(/^I am a student$/) do
@student = Student.new #setting as an instance variable to access later on
@teacher = Teacher.new
end
When(/^I submit an assignment to my teacher$/) do
@assignment = Assignment.new
@teacher.submit_assignment(@student, @assignment)
end
Then(/^my teacher should have my assignment$/) do
expect(@teacher.assignment_for_student(@student)).to eq(@assignment)
end
teacher.rb
class Teacher
def initialize
@assignments = {}
end
def record_grade(student, grade)
assignment = @assignments[student] #assignment equal to assignments of the student
assignment.grade = grade
@assignments[student] = assignment
end
def submit_assignment(student, assignment)
@assignments[student] = assignment
end
def assignment_for_student(student)
@assignments[student]
end
end
teacher_spec.rb
require_relative "../lib/teacher"
require "rspec"
describe Teacher do
it "should store assignments" do
student = double
assignment = double
subject.submit_assignment(student, assignment)
expect(subject.assignment_for_student(student)).to eq(assignment)
end
describe "should record a grade" do
it "should record and the grade" do
student = double
assignment = double
expect(assignment).to receive(:grade=).with(95)
subject.submit_assignment(student, assignment)
subject.record_grade(student, 95)
end
end
end
assignment_spec.rb
require_relative "../lib/assignment"
describe Assignment do
it "should store a grade" do
subject.grade = 60
expect(subject.grade).to eq(60)
end
end
assignment.rb
class Assignment
attr_accessor :grade
end
student.rb
class Student
end
teacher_can_grade_assignment.feature
Feature: Teacher can grade assignment
As a Teacher
I can grade my students' assignments
So that they can know their knowledge level
Scenario: Teacher can grade assignment
Given I have a student
And They submitted an assignment
When They submitted an assignment
Then the assignment has a grade
答案 0 :(得分:1)
您的测试告诉您@teacher.assignment_for_student(@student).grade
是nil
。不知怎的,它设置不正确。这是出乎意料的,因为你说,你期望它是95。
在TDD中,最好的下一步是在失败的测试中弄清楚更多的状态。
添加一些额外(临时)期望,以查看失败步骤中对象的状态:
expect(@teacher.assignment_for_student(@student)).to eq(@assignment)
expect(@teacher.class_variable_get(:@assigments).to include(@assignment)
即使您确定失败的测试也会经常有所帮助。
expect(@teacher.assignment_for_student(@student)).to be "failure"
通过在步骤周围散布这些期望,您可以调试状态并查看代码集成错误的位置。
根据您粘贴的代码,我不会立即发现代码有任何问题。
答案 1 :(得分:1)
您的作业没有成绩,因为教师从未对成绩进行评分:您的专辑没有调用"我对作业步骤进行评分"