【问题标题】:Failure of functional test for 'create' using should_redirect_to使用 should_redirect_to 的“创建”功能测试失败
【发布时间】:2010-11-10 10:25:01
【问题描述】:

我在尝试使用 'should' 和 'factory_girl' 来为 Rails 应用程序中的 'create' 创建功能测试时遇到问题。我创建了一个简单的项目,脚手架用户,在 test_helper.rb 中添加了“should”(我系统上的当前 gem 版本 2.11.3)和“factory_girl”。手动创建用户工作正常。以下是重现失败的步骤:

  1. rails 项目
  2. 脚手架用户名:字符串
  3. 添加 test_helper.rb :

      require 'shoulda'  
      require 'factory_girl'
    
  4. rake db:迁移

  5. 为用户编写以下功能测试(覆盖 users_controller_test.rb):

    class UsersControllerTest < ActionController::TestCase
     Factory.define(:user) do |u|
      u.name 'joe'
     end
     context "should create user" do
      context "with valid data" do
       setup do
         User.any_instance.expects(:save).returns(true).once
         User.any_instance.stubs(:id).returns(1001)
         post :create, :user => {}
       end
       should_assign_to :user, :class => User
       should_set_the_flash_to "User was successfully created."
       should_redirect_to("user page"){user_path(1001)}
      end
     end
    end
    
  6. 使用“rake test:functionals”运行测试显示失败:

预期的响应是重定向到&lt;http://test.host/users/1001&gt;,但 重定向到&lt;http://test.host/users&gt;

我也玩过“should_redirect_to”,因为我看到“should_redirect_to”已被弃用, 但没有运气。你有什么想法吗?

提前谢谢你,

玛丽安·瓦西尔·卡拉曼。

【问题讨论】:

  • 您确认手动创建用户时重定向正确吗?
  • 手动创建用户时工作正常。此外,其他 2 个断言很好。

标签: ruby-on-rails functional-testing shoulda factory-bot


【解决方案1】:

而不是存根 User#id,存根 User.create 并使用特定的用户模拟对象。

setup do
  mock_user = Factory.stub(:user, :id => 1001)
  User.expects(:create).returns(mock_user)
  mock_user.expects(:save).returns(true)
  post :create, :user => {}
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多