0

我正在查看 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

有人可以解释我在哪里误解了吗?谢谢!!

4

1 回答 1

1

我很确定这里缺少一些上下文。被it隐式使用,这意味着 RSpec 已经有了一个主题。它通过多种方式确定主题,有些是隐式的(基于类和describe块名称等),有些是通过subject关键字显式的。很可能在块subject外有一个定义。describe

于 2013-11-06T03:55:41.590 回答