我正在看一下ol hartl教程,虽然他对测试有点疯狂,但我已经能够跟进到目前为止,直到我遇到这个对我来说有点混乱的测试。我想知道你们中有一位经验丰富的开发者是否可以分享他的测试逻辑:
describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
it { should_not eq user_for_invalid_password }
specify { expect(user_for_invalid_password).to be_false }
end
对我来说,看起来他正在创建一个使用具有无效身份验证的用户的返回值定义的变量。
然后他接受了所述变量并表示它不应该等于自己。
然后他还说同一个变量应该是假的。
透明度,这是完整的测试:
describe "return value of authenticate method" do
before { @user.save }
let(:found_user) { User.find_by(email: @user.email) }
describe "with valid password" do
it { should eq found_user.authenticate(@user.password) }
end
describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }
it { should_not eq user_for_invalid_password }
specify { expect(user_for_invalid_password).to be_false }
end
end
有人可以解释我误解的地方吗?谢谢!
答案 0 :(得分:1)
我很确定这里缺少一些背景信息。隐式使用it
,这意味着RSpec已经考虑了一个主题。它通过多种方式确定主题,一些是隐式的(基于类和describe
块名称等),还有一些通过subject
关键字明确地确定。可能在subject
块之外定义了describe
。