rspec测试似乎没有连接

时间:2013-11-06 03:37:56

标签: ruby-on-rails rspec tdd

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

有人可以解释我误解的地方吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我很确定这里缺少一些背景信息。隐式使用it,这意味着RSpec已经考虑了一个主题。它通过多种方式确定主题,一些是隐式的(基于类和describe块名称等),还有一些通过subject关键字明确地确定。可能在subject块之外定义了describe