久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何使用 Jasmine 對鏈式方法進行單元測試

How to unit test a chained method using Jasmine(如何使用 Jasmine 對鏈式方法進行單元測試)
本文介紹了如何使用 Jasmine 對鏈式方法進行單元測試的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

我在對以下方法進行單元測試時遇到問題:

I'm having a problem unit testing the following method:

 $scope.changeLocation = function (url) {
        $location.path(url).search({ ref: "outline" });
    };

我編寫了以下單元測試,但當前失敗并出現此錯誤(TypeError: Cannot read property 'search' of undefined):

I've written the following unit test that currently fails with this error (TypeError: Cannot read property 'search' of undefined):

var $locationMock = { path: function () { }, search: function () { } };

it('changeLocation should update location correctly', function () {
        $controllerConstructor('CourseOutlineCtrl', { $scope: $scope, $location: $locationMock });

        var url = "/url/";
        spyOn($locationMock, "path");
        spyOn($locationMock, "search");

        $scope.changeLocation(url);

        expect($locationMock.search).toHaveBeenCalledWith({ ref: "outline" });
        expect($locationMock.path).toHaveBeenCalledWith(url);
    });

如果我將函數更改為以下,則測試通過:

If I change my function to the following, the test passes:

$scope.changeLocation = function (url) {
        $location.path(url);
        $location.search({ ref: "outline" });
    };

當我使用方法鏈接時,如何對這個方法進行單元測試?我需要以不同的方式設置我的 $locationMock 嗎?對于我的生活,我無法弄清楚這一點.

How do I unit test this method when I'm using method chaining? Do I need to setup my $locationMock differently? For the life of me I cannot figure this out.

推薦答案

那是因為你的 mock 沒有返回 location 對象以便能夠鏈接.使用 Jasmine 2.0,您可以將模擬更改為:

That is because your mock does not return location object to be able to chain through. Using Jasmine 2.0 you can change your mock to:

var $locationMock = { path: function () { return $locationMock; }, 
                      search: function () { return $locationMock; } };

spyOn($locationMock, "path").and.callThrough();
spyOn($locationMock, "search").and.callThrough(); //if you are chaining from search

或添加:

spyOn($locationMock, "path").and.returnValue($locationMock);
spyOn($locationMock, "search").and.returnValue($locationMock); //if you are chaining from search

或者只是創建一個間諜對象(更少的代碼):

Or just create a spy object (less code):

var $locationMock = jasmine.createSpyObj('locationMock', ['path', 'search']);

$locationMock.path.and.returnValue($locationMock);
$locationMock.search.and.returnValue($locationMock); //if you are chaining from search

這篇關于如何使用 Jasmine 對鏈式方法進行單元測試的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How can I get my jasmine tests fixtures to load before the javascript considers the document to be quot;readyquot;?(在 javascript 認為文檔“準備好之前,如何讓我的 jasmine 測試裝置加載?) - IT屋-程序員軟件開發技術
What do jasmine runs and waitsFor actually do?(jasmine 運行和等待實際上是做什么的?)
How to provide mock files to change event of lt;input type=#39;file#39;gt; for unit testing(如何提供模擬文件來更改 lt;input type=filegt; 的事件用于單元測試)
How do I inject $rootScope into an AngularJS unit test?(如何將 $rootScope 注入 AngularJS 單元測試?)
Jasmine - How to spy on a function call within a function?(Jasmine - 如何監視函數中的函數調用?)
jasmine test fails with undefined is not a function(evaluating $browser.$$checkUrlChange())(茉莉花測試失敗,未定義不是函數(評估 $browser.$$checkUrlChange()))
主站蜘蛛池模板: 国产精品久久国产愉拍 | 亚洲精品一区久久久久久 | 综合一区二区三区 | 超碰免费在线观看 | 欧美日韩一区二区三区视频 | www.亚洲一区二区三区 | www.久久久.com| 中文字幕在线观看 | 日韩国产在线 | 天堂一区二区三区四区 | 日本中文字幕一区 | 亚洲综合在线一区二区 | 欧美午夜视频 | 蜜臀久久99精品久久久久野外 | 欧美精品一区三区 | 91xxx在线观看| 7777在线视频免费播放 | 中文字幕日韩欧美一区二区三区 | 亚洲精品日韩综合观看成人91 | 久久精品中文 | 黄色av网站在线观看 | 欧美午夜视频 | 久久高清免费视频 | 国产成人一区在线 | 一区二区在线不卡 | 亚洲第一网站 | 久久精品国产一区二区电影 | 欧美精品一区二区三区在线播放 | 久久久www成人免费精品 | 亚洲精品福利视频 | 久久国产精品一区二区三区 | 久久国产秒 | 国产一区二区三区四区三区四 | 神马影院一区二区三区 | 欧美精品一区二区免费视频 | 天天天操天天天干 | av资源中文在线 | 成人午夜精品 | 久久伊人精品 | 91久久国产综合久久 | 精品久久久久久亚洲综合网 |