比较2个数组以获得内容相等性

时间:2014-05-08 04:10:09

标签: ruby

我想比较两个数组,但assert_equal引发错误:

No visible difference in the Array#inspect output.
You should look at the implementation of #== on Array or its members.

这是我的测试:

describe Post do
    before do
        @draft = Post.new('test-draft', draft = true)
        @post = Post.new('2014-10-31-test-post')
    end

    describe '.drafts' do
        it 'returns an array of unpublished posts' do
            actual = Post.drafts           
            assert_equal [@draft], actual
        end
    end
end

这是我的两个数组,它们的内容相同,但具有不同的内存位置。

[
    [0] #<Post:0x0000000851a178 @file_name="test-draft", @draft=true>
]
[
    [0] #<Post:0x0000000851a538 @file_name="test-draft", @draft=true>
]

如何比较我的两个阵列?

2 个答案:

答案 0 :(得分:3)

听起来你的Post类没有自己的==运算符,所以没有两个Post对象可以相等。我想你想给Post一些平等的想法。

答案 1 :(得分:1)

由于你想看看这些值是否正确,你可以实现一个类似帮助器的方法来实现像

这样的方法。
a = [1,2,3]
b = [1,2,3]

((a - b) + (b - a)).empty?
#=> true

例如

def arrays_equal_values?(a, b)
    ((a - b) + (b - a)).empty?
end