2

Jasmine フレームワークを使用して Javascript テストを作成しています。spyOn()メソッドを使用して、特定の関数が呼び出されたことを確認しようとしています。ここに私のコードがあります

    describe("Match a regular expression", function() {
    var text = "sometext"; //not important text; irrelevant value

    beforeEach(function () {
        spyOn(text, "match");
        IsNumber(text);
    });

    it("should verify that text.match have been called", function () {
        expect(text.match).toHaveBeenCalled();
    });
});

しかし、私は

スパイを期待したが、機能を得た

エラー。行を削除しようとしspyOn(text, "match");ましたが、同じエラーが発生しましたspyOn()。機能が機能していないようです。何か考えはありますか?

4

2 に答える 2

1

string.match や string.replace などをテストするためにスパイは必要ないことがわかりましたが、一致または置換する内容を含むテキストを宣言し、beforeEach で関数を呼び出してから、応答を確認します。あなたが期待するものと同じです。簡単な例を次に示します。

describe('replacement', function(){
    var text;
    beforeEach(function(){
        text = 'Some message with a newline \n or carriage return \r';
        text.replace(/(?:\\[rn])+/g, ' ');
        text.replace(/\s\s+/g, ' ');
    });
    it('should replace instances of \n and \r with spaces', function(){
        expect(text).toEqual('Some message with a newline or carriage return ');
    });
});

これは成功します。このシナリオを考えると、複数のスペースを単一のスペースに削減するために、置換もフォローアップします。また、この場合、ステートメントbeforeEach内で期待する前に割り当てと関数への呼び出しを使用できるため、 は必要ありません。のように裏返して読むitと、操作と同様に機能するはずです。string.matchexpect(string.match(/someRegEx/).toBeGreaterThan(0);

お役に立てれば。

-C§

編集: または、str.replace(/regex/);orstr.match(/regex/);を呼び出される関数に圧縮して、spyOnそこに使用spyOn(class, 'function').and.callthrough();して使用し、 (単に関数を呼び出すのではなく) andbeforeEachのようなものを使用すると、replace orの戻り値をテストできます。試合のために。expect(class.function).toHaveBeenCalled();var result = class.function(someString);expect(class.function(someString)).toEqual(modifiedString);expect(class.function(someString)).toBeGreaterThan(0);

これによりさらに深い洞察が得られた場合は、気軽に +1 してください。

ありがとう、

于 2015-08-24T17:00:17.983 に答える