Ruby on rails rspec2.14非常奇怪的语法

Ruby on rails rspec2.14非常奇怪的语法,ruby-on-rails,ruby,rspec,rspec2,rspec-rails,Ruby On Rails,Ruby,Rspec,Rspec2,Rspec Rails,RSPEC2.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.a

RSPEC2.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) }

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

它们不需要。您可以改为
更改(User,:count)
。您正在使用的表单在运行该行之前和之后计算块,并检查值是否正确更改。英文:

  • 用户计数现在是X
  • Frontend::userscocontroller
    中调用
    create
  • 在此之后,用户计数为Y
  • 我希望Y等于X+1
更新


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

他们没有。您可以改为
更改(User,:count)
。您正在使用的表单在运行该行之前和之后计算块,并检查值是否正确更改。英文:

  • 用户计数现在是X
  • Frontend::userscocontroller
    中调用
    create
  • 在此之后,用户计数为Y
  • 我希望Y等于X+1
更新


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

我猜他指的是
主题
部分。可能吧。在这两种情况下,答案都非常相似。我会更新更多的解释。这里有很多关于这个主题的词(哈哈):@zettetic你的链接没有回答OP的问题,我想他是指
主题
部分。也许吧。在这两种情况下,答案都非常相似。我会更新更多的解释。这里有很多关于这个主题的词(哈哈):@zettetic你的链接没有回答OP的问题我还没有听到关于这个问题的好答案,我已经多次提出这个问题。我还没有听到关于这个问题的好答案,我已经多次提出这个问题。