在一个文件(如 test/unit)中使用 Rspec

pet*_*ter 4 ruby unit-testing rspec sublimetext3

当我有时间的时候,我喜欢在Codewars中接受挑战。到目前为止,我曾经test/unit进行单元测试,但我想Rspec现在使用而不改变我的工作方式。这些都是小方法/文件/测试,所以我喜欢将所有内容都放在一个脚本中。

我使用 Sublime Text 运行几乎所有代码,并在编辑器底部的窗口中获取结果。

这是我的工作test/unit示例

require 'test/unit'

def anagrams(word, words)
  words.select { |w| w.chars.sort == word.chars.sort }
end

class MyTest < Test::Unit::TestCase
  def test_fail
    assert_equal(['aabb', 'bbaa'], anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) )
    assert_equal(['carer', 'racer'], anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) )
    assert_equal([], anagrams('laser', ['lazing', 'lazy',  'lacer']) )
  end
end
Run Code Online (Sandbox Code Playgroud)

这在 Sublime 中给出了以下输出

Loaded suite C:/Users/.../codewars/anagram
Started
.

Finished in 0.001 seconds.
------
1 tests, 3 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
------
1000.00 tests/s, 3000.00 assertions/s
[Finished in 0.3s]
Run Code Online (Sandbox Code Playgroud)

这是我为 Rspec 所做的尝试

require 'rspec'

describe "Anagrams" do
  def anagrams(word, words)
    words.select { |w| w.chars.sort == word.chars.sort }
  end

  it "should only match the anagrams" do
    anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) == ['aabb', 'bbaa']
  end
end
Run Code Online (Sandbox Code Playgroud)

在 Sublime text 中,我没有得到任何输出,只有一个空的黑色窗口,其中包含执行脚本所需的时间,如果我使用控制台并运行,rspec anagram.rb我会得到

.

Finished in 0.001 seconds (files took 0.10601 seconds to load)
1 example, 0 failures
Run Code Online (Sandbox Code Playgroud)

如何将我的代码和测试放在同一个文件中,并通过在 Sublime Text 编辑器中运行脚本(并获取输出)来进行测试,以及如何更好地重新表述此测试?

小智 5

你只需要告诉RSpec::Core::Runner运行你的规范。

RSpec::Core::Runner.run([$__FILE__])在填充结束时添加应该可以。

更新的代码:

require 'rspec'

describe "Anagrams" do
  def anagrams(word, words)
    words.select { |w| w.chars.sort == word.chars.sort }
  end

  it "should only match the anagrams" do
    anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) == ['aabb', 'bbaa']
  end
end

RSpec::Core::Runner.run([$__FILE__])
Run Code Online (Sandbox Code Playgroud)