Hartl Ch 6规范澄清

时间:2013-03-19 20:13:53

标签: ruby-on-rails rspec

我正在阅读Michael Hartl的书。我在第6.3.3节。我理解我们要完成的任务。但是,对我来说,其中两个规格似乎正在测试同样的事情:

来自user_spec.rb:http://ruby.railstutorial.org/chapters/modeling-users#code-authenticate_spec

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 == found_user.authenticate(@user.password) }
    end

    describe "with invalid password" do
      let(:user_for_invalid_password) { found_user.authenticate("invalid") }

      it { should_not == user_for_invalid_password }          #1
      specify { user_for_invalid_password.should be_false }   #2
    end
  end

规格1和2是否都不测试DB如果密码不正确则不应验证用户?这些测试有何不同?

1 个答案:

答案 0 :(得分:0)

规格1和2彼此相反。

在第一个中,您将有效密码传递给authenticate方法,在这种情况下返回用户对象本身,然后使用'should'将其与主题用户对象进行比较

在第二种情况下,您传递的是无效密码以进行身份​​验证,然后只返回false,其中“should_not”等于主题用户对象。

希望有所帮助。