什么是在RSpec中写这个的更好方法?

时间:2014-03-25 19:06:43

标签: ruby-on-rails rspec devise tdd capybara

我编写了一个功能规范,用于在用户注册时进行测试。我已经有了它的工作,但我觉得期待块很奇怪。

feature 'Visitor signs up' do
  scenario 'with a valid email and password' do
     visit new_account_path

     fill_in_account_fields
     fill_in_user_fields('valid@example.com', 'foobar123')

     expect{click_button 'Sign up'}.to change{Account.count}.by(1) and
                                       change{User.count}.by(1)
  end
end

特别是:

expect{click_button 'Sign up'}.to change{Account.count}.by(1) and
                                  change{User.count}.by(1)

有更好的方法吗?你认为我是以正确的方式接近这个吗?

1 个答案:

答案 0 :(得分:1)

嗯,我不知道这件事。由于这是一个集成测试,我只想把用户看到的内容。例如,我把`expect(page).to have_content(" Hello user")。然后,您可以对将User.count更改为1的控制器或模型进行单元测试。

您想要进行从外到内的测试。使用集成测试测试功能(模拟用户填写内容和点击),同时使用单元测试测试Web应用程序。

  scenario 'with a valid email and password' do
     visit new_account_path    
     fill_in_account_fields
     fill_in_user_fields('valid@example.com', 'foobar123')
     click_button 'Sign Up'

     expect(page).to have_content 'Hi Guy'
  end

检查这些。 Everyday Rails的书值得每一分钱。

http://everydayrails.com/2014/01/15/outside-in-example-ruby-tapas.html

这是演讲中的截屏视频:

http://www.rubytapas.com/episodes/120-Outside-In