2012-03-27 81 views
4

我正在尝试使用Rails自己的测试系统在用户模型上进行一些集成测试,如用户模型中出现的rails教程。导轨集成测试问题

在routes.rb中我做了以下映射:

match '/signup', to: 'users#new' 

测试看起来像这样:

class UserStoriesTest < ActionDispatch::IntegrationTest 
    test "sign up" do 
    User.delete_all 
    post_via_redirect "/users", 
      user: {name: 'david', 
        email: '[email protected]', 
        password: 'qwe123', 
        password_confirmation: 'qwe123'} 
    assert_response :success 
    users = User.all 
    assert_equal 1, users.size, users.size 
    end 
end 

无论我做什么,我不能让它创建一个新的记录,以便第二个断言失败。 我也尝试通过设置错误的确认密码来破坏它,并且它在第一个断言中没有失败。 我只尝试发布帖子而不是post_via_redirect,或者使用“注册”路径而不是“/ users”,但没有任何更改。

我一定在做一些愚蠢的事情。我在这里错过什么?

问候。

回答

0

您实际上并未填写注册表单。它看起来像你使用的测试::单元,你需要它webrat或水豚来处理请求规格,我推荐后者。

https://github.com/brynary/webrat

0

这种反应可能是老了多大用处的给你,但有两件事情站出来给我。

1)这不应该是一个集成测试,因为你没有测试多个控制器之间的交互。这应该是一个功能测试,用于测试单个控制器,在这种情况下是您的UsersController。这是非常重要的,因为不同的方法和功能根据你的声明是可用/加载的。

class UserStoriesTest < ActionDispatch::IntegrationTest 

会给你一个非常不同的环境

class UserTest < ActiveSupport::TestCase 

注意,集成测试是ActionDispatch的部分,而功能测试的ActiveSupport的一部分。我强烈建议将其移至功能测试,这可能是您错误的根源。

2)使用delete_all有点极端。实际上,当你发布帖子时,你可以做一个断言测试,看看是否存在计数差异。

assert_difference('User.count') do 
    post :create, :user => {name: 'david', 
       email: '[email protected]', 
       password: 'qwe123', 
       password_confirmation: 'qwe123'} 
end 

这将断言User.count不同于运行do循环中和do循环结束之前的内容。那里的那个街区可以取代你在“注册”测试中的一切。有趣的是,您可以将assert_difference更改为assert_no_difference,如果通过,您知道您的users_controller.rb中的post方法有问题(这是我认为您的问题实际存在的地方)。

3)您的assert_equal行看起来有点奇怪。通过的最后一个参数是它在失败时会吐出的消息。只打印一个数字可能适用于一项测试,但在许多测试中看起来会很奇怪。这样的东西,因为我相信下面是接近规范:

assert_equal 1, User.count, "Expected User.count to be equal to 1, instead it is equal to: " + User.count.to_s 

另外请注意,你可以使用的,而不是做一些像把所有的记录成一个对象,然后调用该对象的大小ModelName.count 。这很快就会变得非常混乱。

最后,作为一个通用的调试工具,您可以在整个地方抛出puts语句或logger语句来查看实际正在进行的操作。

puts User.count 

在你的delete_all和你的post_via_redirect会很快告诉你哪里出了问题。如果您使用记录器方法,它将被写入到您的appname/log/ENV.log中的日志中。所以如果你正在运行测试,它将在test.log中。

logger.debug User.count 

你的日志也将保持所有的请求的记录,这样你就可以阅读,看看你得到200个OKS,302个重定向等

我建议您查看所提供的以下指南导轨,他们是伟大的起点地方:

http://guides.rubyonrails.org/testing.html

http://guides.rubyonrails.org/debugging_rails_applications.html

希望这^ h帮助别人!