8

我来自 Ruby/Rails 世界。我正在 Sinatra 项目(使用 Rack::Test)上设置测试。我通常在测试中使用 Fixtures。Sinatra 有没有等价物?

人们如何设置他们的 Sinatra 测试套件(除了基本的 helloworld 示例之外,这是我能找到的 Sinatra 测试的唯一示例)。

谢谢!

4

2 回答 2

4

我为此使用了机械师(还有 Rails。讨厌 YAML 固定装置。)

于 2010-05-14T17:54:56.527 回答
0

ActiveRecord 包括对固定装置的支持,您只需将它们连接到test_helper.rb.

# test/test_helper.rb
require_relative '../app'
require 'minitest/autorun'
require 'active_record'

ActiveRecord::Base.establish_connection(:test)

class ActiveSupport::TestCase
  include ActiveRecord::TestFixtures
  include ActiveRecord::TestFixtures::ClassMethods

  class << self
    def fixtures(*fixture_set_names)
      self.fixture_path = 'test/fixtures'
      super *fixture_set_names
    end
  end

  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = false
end

然后你可以在你的测试类上使用fixtures。

# test/unit/blog_test.rb
require_relative '../test_helper'

class BlogTest < ActiveSupport::TestCase
  fixtures :blogs

  def test_create
    blog = Blog.create(:name => "Rob's Writing")
    assert_equal "Rob's Writing", blog.name
  end

  def test_find
    blog = Blog.find_by_name("Jimmy's Jottings")
    assert_equal "Stuff Jimmy says", blog.tagline
  end
end

配置 Rake 以在正确的位置查找您的测试。

# Rakefile
require_relative './app'
require 'rake'
require 'rake/testtask'
require 'sinatra/activerecord/rake'

Rake::TestTask.new do |t|
  t.pattern = "test/**/*_test.rb"
end

task default: :test

我发布了一个小示例应用程序来演示如何使用 Sinatra、ActiveRecord 和测试装置。

于 2016-01-27T01:27:21.513 回答