【问题标题】:rspec 2.14 very strange syntaxrspec 2.14 非常奇怪的语法
【发布时间】:2013-11-15 21:59:16
【问题描述】:

rspec 2.14 语法有问题。 RSpec 控制器工作得很好,但它需要不同的语法。

describe Frontend::UsersController, type: :controller do
  describe 'POST "create"' do
    subject { post :create, user: { login: email } }

    context 'with valid attributes' do
      let(:email) { FactoryGirl.attributes_for(:user)[:email] }

      it { expect{ subject }.to change{ User.count }.by(1) }
      it { expect(subject).to redirect_to(root_path) }

为什么更改和重定向方法需要不同的语法?

【问题讨论】:

  • 我还没有听到一个很好的答案,我已经多次提出这个问题。

标签: ruby-on-rails ruby rspec rspec2 rspec-rails


【解决方案1】:

他们没有。你可以改用change(User, :count)。您正在使用的表单在运行该行之前和之后评估块,并检查值是否适当更改。英文:

  • 现在用户数是 X。
  • Frontend::UsersController 中致电create
  • 之后用户数为 Y。
  • 我希望 Y 等于 X + 1。

更新

如果您实际上是在谈论 expect{subject}expect(subject)change 期望需要一些东西来测试变化反对。由于您传递expect 一个块,change 知道它可以首先检查用户计数,评估块(调用subject),然后再次检查用户计数。如果你没有通过一个块,那么当你真正想要开始检查用户计数的变化时就很模糊了。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2016-03-13
  • 2014-08-22
  • 2011-03-01
相关资源
最近更新 更多