gpt4 book ai didi

ruby-on-rails-4 - Rails 和 minitest/spec 中的 NoMethodError

转载 作者:行者123 更新时间:2023-12-04 17:47:47 24 4
gpt4 key购买 nike

如果没有 minitest/spec,测试看起来像这样,而 my_engine_customers装置已加载(一切正常):
my_engine/test/models/my_engine/customer_test.rb

require 'test_helper'

module MyEngine
class CustomerTest < ActiveSupport::TestCase

test "alex is id 5" do
assert my_engine_customers(:alex).id, 5
end

end
end

添加后 require 'minitest/autorun'test/test_helper.rb , 进而
转换上述测试:
require 'test_helper'

describe MyEngine::Customer do

let(:alex) { my_engine_customers(:alex) } # error here (error shown below)

it "alex is id 5" do
assert alex.id, 5
end

end

我收到此错误:
NoMethodError: undefined method `my_engine_customers' for
#<#<Class:0x007fb63e8f09e8>:0x007fb63e81b068>

使用 minitest/spec 时如何访问设备?

最佳答案

当您使用规范 DSL 时,您会得到一个 Minitest::Spec对象来运行您的测试。但是 Rails 夹具和数据库事务仅在 ActiveSupport::TestCase 中可用。 ,或从它继承的测试类,如 ActionController::TestCase .所以你需要的是规范 DSL 使用的某种方式 ActionSupport::TestCase为您测试。

这有两个步骤,首先 ActiveSupport::TestCase需要支持规范 DSL。您可以通过向您添加以下代码来做到这一点 test_helper.rb文件:

class ActiveSupport::TestCase
# Add spec DSL
extend Minitest::Spec::DSL
end

(您知道 ActiveSupport::TestCase.describe 存在吗?如果您打算进行嵌套描述,您可能希望在添加规范 DSL 之前删除该方法。)

其次,您需要告诉规范 DSL 使用 ActiveSupport::TestCase .规范 DSL 添加 register_spec_type只是为了这个目的。因此,还将以下内容添加到您的 test_helper.rb文件:
class ActiveSupport::TestCase
# Use AS::TestCase for the base class when describing a model
register_spec_type(self) do |desc|
desc < ActiveRecord::Base if desc.is_a?(Class)
end
end

这将查看描述的主题,如果它是 ActiveRecord 模型,它将使用 ActiveSupport::TestCase而不是 Minitest::Spec运行测试。

正如您所料,当您尝试将规范 DSL 用于 Controller 和其他类型的测试时,还会涉及许多其他问题。 IMO 最简单的方法是添加对 minitest-rails 的依赖。然后 require "minitest/rails"在您的 test_helper.rb文件。 minitest-rails 完成所有这些配置以及更多配置,并使过程更加顺畅。 (再次,海事组织。)

有关更多信息,请参阅我的 blaurgh 帖子 Adding Minitest Spec in Rails 4 .

关于ruby-on-rails-4 - Rails 和 minitest/spec 中的 NoMethodError <fixture name>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27883596/

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