gpt4 book ai didi

ruby-on-rails - Rails - 为什么我不能在测试中使用我在模块中创建的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:38 24 4
gpt4 key购买 nike

我在 lib 目录中创建了一个模块,我可以在我的 Rails 应用程序中自由调用它包含的各种方法(在添加 include ModuleName 之后),没有任何问题。

然而,当涉及到测试时,他们提示不存在这样的方法。我尝试将该模块包含到我的测试助手中,但没有成功。谁能帮忙。

4) Error:
test_valid_signup_redirects_user_to_spreedly(UsersControllerTest):
NoMethodError: undefined method `spreedly_signup_url' for SpreedlyTools:Module
/test/functional/user_controller_test.rb:119:in `test_valid_signup_redirects_user_to_spreedly'

module SpreedlyTools
protected
def spreedly_signup_url(user)
return "blahblah"
end
end

class ApplicationController < ActionController::Base


helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
include SpreedlyTools
....
end

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'

class ActiveSupport::TestCase
include SpreedlyTools
....
end

require File.dirname(__FILE__) + '/../test_helper'
require 'users_controller'

# Re-raise errors caught by the controller.
class UsersController; def rescue_action(e) raise e end; end

class UsersControllerTest < ActionController::TestCase
....

def test_valid_signup_redirects_user_to_spreedly
get :new
assert_response :success
post :create, :user => {:first_name => "bobby",
:last_name => "brown",
:email => "bobby.brown@gmail.com",
:email_confirmation => "bobby.brown@gmail.com",
:password => "bobby1",
:password_confirmation => "bobby1"}

assert_response :redirect
user = assigns(:user)
assert_redirected_to SpreedlyTools.spreedly_signup_url(user)

end
end

最佳答案

这里有几个不同的错误。首先,当您创建一个模块并将模块的内容混合到一个类中时,模块中的方法将成为类本身的一部分。

也就是说,下面这行没有意义

assert_redirected_to SpreedlyTools.spreedly_signup_url(user)

假设您将模块混合到一个 User 类中,您应该将方法调用为

assert_redirected_to User.new.spreedly_signup_url(user)

还要注意 new 语句。因为您将模块include 到类中并且您没有extend 类,所以该方法成为实例方法而不是类方法。

assert_redirected_to User.new.spreedly_signup_url(user) # valid
assert_redirected_to User.spreedly_signup_url(user) # invalid

因此,以下行没有意义。

class ActiveSupport::TestCase
include SpreedlyTools
....
end

关于ruby-on-rails - Rails - 为什么我不能在测试中使用我在模块中创建的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1826282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com