ReferenceError: $ 未定义 - Jasmine

Kas*_*ska 6 javascript ajax jquery unit-testing jasmine

我以前从未使用过 Jasmine,但我正在从事的这个小项目需要我。无法完全弄清楚,任何帮助将不胜感激。我查看了各种教程并对问题进行了搜索,但对此不熟悉并无济于事。

JS源文件

> $(document).ready(function(){
>    
> 
> $.ajax({ type: 'GET', dataType: "json", url: "db.php/realmadrids", 
> success: showResponse,  error: showError });
> 
> 
> 
>  
> 
> 
> console.debug("error");   function showResponse(responseData){
> 
>   //$("#get1").click(function getPlayers(responseData) { 
>   console.log('Image is clicked');    console.log(responseData);
>     $.each(responseData.realmadrid, function(index, realmadrid){
>       console.log(' is ');
>         $("#playercontentRealMadrid").append("</br><strong> Full Name: </strong>" +realmadrid.PlayerName+ " "+realmadrid.PlayerLastName+"
> </br> <strong>Player Position: </strong>" +realmadrid.PlayerPosition+"
> </br><strong>Player Age: </strong>" +realmadrid.Age+"
> </br><strong>Player Height: </strong>" +realmadrid.Height+"
> </br><strong>Player Weight: </strong>" +realmadrid.Weight+"
> </br><strong>Team Name: </strong>" +realmadrid.TeamName+"</br>");
>     
>         console.log('Data should output'); // });   });
> 
> console.log(responseData);
>     }
>     console.debug("hello");
> 
> function showError(){ alert("Sorry, but something went wrong. Fix
> it!!!!") }
> 
> });
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码:

//Test Suite
describe("Spy on my own AJAX call", function(){
    
    it("should make AJAX request with successful setting", function() {
    
        spyOn($, "ajax");
        
        expect($.ajax).toHaveBeenCalledWith({
            url:'db.php/realmadrids',
            type:'GET',
            dataType: "json",
            sucess: showResponse,
            error: showError
        });
    
    });
   
});
Run Code Online (Sandbox Code Playgroud)

Kar*_*iri 10

我的 Angular 7 项目中也有同样的问题。下面的步骤解决了这个问题。

在 spec.ts 文件的顶部添加以下代码

    declare var $: any;
Run Code Online (Sandbox Code Playgroud)

Karma 插件 - jQuery 框架的适配器。

    npm install karma-jquery --save-dev
Run Code Online (Sandbox Code Playgroud)

在 karma.conf.js 文件的“plugins”数组中添加“ karma-jquery

    module.exports = function(config) {
    config.set({

    plugins: ['karma-jquery']
Run Code Online (Sandbox Code Playgroud)

在同一个文件中的框架数组中添加 jquery 的版本。

    frameworks: ['jasmine', '@angular-devkit/build-angular','jquery-3.2.1']
Run Code Online (Sandbox Code Playgroud)

  • 这对于 Angular 测试来说是合适的并且优于公认的答案。 (2认同)

Jon*_*ink 3

您需要包含 jQuery。

在这种情况下,$它实际上是一个函数(来自 jQuery 库),因为 jQuery 尚未加载,您会收到此函数未定义的错误。

包含 jQuery 的方式与包含 Jasmine 库的方式相同。一种方法是使用 CDN:

<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
Run Code Online (Sandbox Code Playgroud)