Ruby on rails 用于测试的存根Github模块
在我的gem中,我使用gem for GitHub API。我创建了一个Ruby on rails 用于测试的存根Github模块,ruby-on-rails,ruby,unit-testing,Ruby On Rails,Ruby,Unit Testing,在我的gem中,我使用gem for GitHub API。我创建了一个EachValidator,用于检查某些URL的存在性,给定: def validate_each(record, attribute, value) return if value.empty? and not opts[:presence] if check_github_url value repo_data = GithubStats::Parser.parse value begin
EachValidator
,用于检查某些URL
的存在性,给定:
def validate_each(record, attribute, value)
return if value.empty? and not opts[:presence]
if check_github_url value
repo_data = GithubStats::Parser.parse value
begin
Github.repos(user: repo_data[:username], repo: repo_data[:repo]).commits.all
rescue Github::Error::NotFound => e
p e
record.errors[attribute] << error_message
end
else
record.errors[attribute] << error_message
end
end
第一件事是在给定参数的条件下返回良好响应或引发异常,所以我需要以某种方式捕获参数。或者我应该提出一个异常的测试用例需要它吗?这将是一个完美而简单的解决方案,但从测试中我什么也得不到,对吗
编辑2:
我试过这样的方法:
#test case class
def initialize param
Github.stubs(:repos).returns({})
Github.repos.stubs(:commits).returns({})
Github.repos.commits.stubs(:all).returns({})
super param
end
def test_method
Github.repos.commits.stubs(:all).throws(Github::Error::NotFound.new({}))
# do the real method
validated_record = validate_github_url("https://github.com/puradawid/github_stats_notexisting") do |model, attr_name|
model.errors.[].expects('<<').once
end
end
#测试用例类
def初始化参数
stubs(:repos).returns({})
Github.repos.stubs(:commits).returns({})
Github.repos.commits.stubs(:all).returns({})
超级参数
结束
def测试方法
Github.repos.commits.stubs(:all).throws(Github::Error::NotFound.new({}))
#做真实的方法
已验证的\u记录=验证\u github\u url(“https://github.com/puradawid/github_stats_notexisting)do |型号,属性名称|
model.errors.[]需要('Try
因此,假设您希望API返回JSON,您可以这样做
require 'json'
...
Github.expects(:repos).returns(JSON.generate({some: :hash}))
这是一个非常好的想法,不幸的是行不通-正如你所看到的,它不是JSON,Github::API
是更复杂的对象(使用Hashie
和许多元编程)。我仍然在寻找模仿这个gem的最佳想法。
ArgumentError: uncaught throw #<Github::Error::NotFound: : >
/home/dawid/.rvm/gems/ruby-2.1.5/gems/mocha-1.1.0/lib/mocha/thrower.rb:10:in `throw'
/home/dawid/.rvm/gems/ruby-2.1.5/gems/mocha-1.1.0/lib/mocha/thrower.rb:10:in `evaluate'
/home/dawid/.rvm/gems/ruby-2.1.5/gems/mocha-1.1.0/lib/mocha/return_values.rb:20:in `next'
/home/dawid/.rvm/gems/ruby-2.1.5/gems/mocha-1.1.0/lib/mocha/expectation.rb:569:in `invoke'
/home/dawid/.rvm/gems/ruby-2.1.5/gems/mocha-1.1.0/lib/mocha/mock.rb:296:in `method_missing'
/home/dawid/.rvm/gems/ruby-2.1.5/gems/mocha-1.1.0/lib/mocha/class_method.rb:63:in `all'
/home/dawid/github_stats/lib/validators/github_projects_url_validator.rb:8:in `validate_each'
/home/dawid/github_stats/test/github_validator_test.rb:85:in `validate_github_url'
/home/dawid/github_stats/test/github_validator_test.rb:45:in `block in <class:GithubStatsValidatorTest>'
Github.expects(:repos).returns(JSON.generate("Some Return Value"))
require 'json'
...
Github.expects(:repos).returns(JSON.generate({some: :hash}))