jasmine.jsに、2つの配列が等しいかどうかを確認する方法はありますか。次に例を示します。
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
どちらも動作しないようです。
jasmine.jsに、2つの配列が等しいかどうかを確認する方法はありますか。次に例を示します。
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
どちらも動作しないようです。
回答:
テストを行っただけで動作します toEqual
私のテストを見つけてください:
describe('toEqual', function() {
    it('passes if arrays are equal', function() {
        var arr = [1, 2, 3];
        expect(arr).toEqual([1, 2, 3]);
    });
});
情報のみ:
toBe()とtoEqual()の比較:toEqual()は等価性をチェックします。一方、toBe()は、それらがまったく同じオブジェクトであることを確認します。
toBeCloseTo(expected,2)が、うまくいかないようです。
                    配列に値がある場合は、以下のような配列を比較できます
it('should check if the array are equal', function() {
        var mockArr = [1, 2, 3];
        expect(mockArr ).toEqual([1, 2, 3]);
 });
ただし、ある関数から返された配列に1つ以上の要素があり、すべてがゼロの場合は、
expect(mockArray[0]).toBe(0);
              レコードのためだけに、JSON.stringifyを使用して常に比較できます
const arr = [1,2,3];
expect(JSON.stringify(arr)).toBe(JSON.stringify([1,2,3]));
expect(JSON.stringify(arr)).toEqual(JSON.stringify([1,2,3]));
すべて味のメーターです。これは複雑なリテラルオブジェクトにも機能します
アレイの1つが変更されたという同様の問題がありました。私はそれをに使用していましたが$httpBackend、そこから返されたオブジェクトは実際に$promiseは配列ではなくArrayオブジェクトでした。
toBeArray関数を作成することにより、配列と一致するジャスミンマッチャーを作成できます。
beforeEach(function() {
  'use strict';
  this.addMatchers({
    toBeArray: function(array) {
      this.message = function() {
        return "Expected " + angular.mock.dump(this.actual) + " to be array " + angular.mock.dump(array) + ".";
      };
      var arraysAreSame = function(x, y) {
         var arraysAreSame = true;
         for(var i; i < x.length; i++)
            if(x[i] !== y[i])
               arraysAreSame = false;
         return arraysAreSame;
      };
      return arraysAreSame(this.actual, array);
    }
  });
});
そして、他のジャスミンマッチャーと同じように、テストで使用します。
it('should compare arrays properly', function() {
  var array1, array2;
  /* . . . */
  expect(array1[0]).toBe(array2[0]);
  expect(array1).toBeArray(array2);
});
              x=[1,2]、y=[1,2,3]それが唯一の最初のチェック以来x.lengthの要素を。これは、if (x.length !== y.length) { return false; }事前に確認することで修正できます。
                    for (var i; ...)=> x[undefined]、var arraysAreSame = function ... var arraysAreSame = true:(
                    expect([1]).toBeArray([2])ます。そしてまた、他のアレイ本当に、理由undefined + 1 => NaN