当我运行 rspec 进行测试时,出现以下错误:
无法加载此类文件 -- mocha/object (LoadError) 问题出在config.mock_with :mocha以下行:
这是我的spec_helper.rb:
require 'rubygems'
require 'spork'
Spork.prefork do
# Loading more in this block will cause your tests to run faster. However,
# if you change any configuration or code from libraries loaded here, you'll
# need to restart spork for it take effect.
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rails'
require 'capybara/rspec'
#require 'spork/ext/ruby-debug'
# Requires supporting ruby files with custom matchers and macros, …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的 Sinatra 应用程序:
my_module.rb
module MyModule
def my_method
"yay"
end
end
Run Code Online (Sandbox Code Playgroud)
应用程序.rb
get "/my_module" do
puts my_method
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用和my_method进行测试。Minitestmocha
def test_my_method
MyModule.stubs(:my_method).returns("stubbed")
get "/my_module"
end
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,因为原始方法仍然被调用。关于如何做到这一点有什么想法吗?谢谢!
所以我有这个简单的 ruby 类:
class GetRequestList
def initialize(current_user, filter_hash)
@authorizer = RequestAuthorizer.new(current_user)
@filter = RequestFilter.new(filter_hash)
end
def generate
Request.send_chain(@authorizer.method_chain)
.send_chain(@filter.method_chain)
end
end
Run Code Online (Sandbox Code Playgroud)
并且我想测试在隔离和实现中Request接收两种send_chain方法。为此,我正在尝试使用一些存根:RequestAuthorizerRequestFilter
require 'test_helper'
class GetRequestListTest < ActiveSupport::TestCase
test "request should be filtered by filter and role" do
Request.expects(:send_chain).twice.returns([build(:request)])
RequestFilter.stubs(:new)
RequestFilter.any_instance.stubs(:method_chain).returns([])
RequestAuthorizer.stubs(:new)
RequestAuthorizer.any_instance.stubs(:method_chain).returns([])
assert GetRequestList.new(:current_user, :filter).generate.size == 1
end
end
Run Code Online (Sandbox Code Playgroud)
你看有什么问题。stubs(:new)返回nil并且在RequestAuthorizer和RequestFilter的实例变量中没有实例,GetRequestList我们得到一个错误。我不知道如何在实例变量上存根方法。有什么建议?
我有以下 Rakefile
desc "Runs tests"
namespace :test do
task :api do
`mocha`
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行命令时rake test:api,如果我只运行命令,我不会得到很好的点输出mocha。
如何在 rake 任务中实时打印命令的输出?
我试图断言方法调用发生在第一个参数是一个符号的情况下,如下所示:
Foo.bar(:some_key, {})
现阶段我真的不在乎第二个论点是什么。
我试过了:
Foo.expects(:bar).with(includes(:some_key))
以及在此处的文档中找到的其他变体。当我期望使用任何参数调用方法时,测试就会通过。
有任何想法吗?