我在使用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) }
为什么更改和重定向方法需要不同的语法?
答案 0 :(得分:1)
他们没有。你可以改为change(User, :count)
。您正在使用的表单在运行该行之前和之后评估该块,并检查该值是否已更改。用英语:
create
。Frontend::UsersController
<强>更新强>
如果您实际上在讨论的是expect{subject}
与expect(subject)
:change
期望需要测试一下对的更改。由于您正在传递expect
一个块,change
知道它可以先检查用户数,评估该块(调用subject
),然后再次检查用户计数。如果你没有传递一个块,那么当你真正想要开始检查用户数的变化时,这是不明确的。