javascript - Angular 测试 http 请求报错

标签 javascript angularjs unit-testing

我正在尝试使用动态 url 测试 http 请求

我的服务文件里有一些东西,比如

我的服务文件。

//other service codes..
//other service codes..
var id = $cookies.id;
return $http.get('/api/product/' + id + '/description')
//id is dynamic 

测试文件

describe('test', function () {
    beforeEach(module('myApp'));

    var $httpBackend, testCtrl, scope;

    beforeEach(inject(function (_$controller_, _$httpBackend_, _$rootScope_) {
        scope = _$rootScope_.$new();
        $httpBackend = _$httpBackend_;
        testCtrl = _$controller_('testCtrl', {
            $scope: scope
        });
    }));

    it('should check the request', function() {
        $httpBackend.expectGET('/api/product/12345/description').respond({name:'test'});
        $httpBackend.flush();
        expect(scope.product).toBeDefined();
    })
});

我收到一个错误提示

Error: Unexpected request: GET /api/product/description

我不确定如何测试动态 url。谁能帮我解决这个问题?非常感谢!

最佳答案

您的代码中没有设置 id,因此 url 变为:

/api/product//description

减少到你在意外请求中看到的内容 (//->/)

那么,为什么没有定义 id?在您设置的位置显示代码。

在测试“动态”网址时,您需要设置您的测试,以便您知道 id 的值是什么,并期望它。无法预期 url 的模式。

您可以通过更改描述 block 的第一行来修改 cookie 的值:

beforeEach(module('myApp', function($provide) {
  $provide.value('$cookies', {
    id: 3
  });
}));

现在您可以预期,当 URL 调用发生时,id 将为 3。

虽然这很粗糙。你也可以在第二个 beforeEach block 中注入(inject) $cookies 并设置它

beforeEach(inject(function($cookies) {
    $cookies.put('id', 3);
}))

关于javascript - Angular 测试 http 请求报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956548/

相关文章:

javascript - .net core 2.1 在来自 axios 和 Vue.js 的 ajax 请求中绑定(bind)数组

java - Junit:判断junit是否在运行

AngularJS 与 ngResource : How to check exact response from server?

java - spring 注入(inject)模拟未使用

python - 测试 Python 脚本

javascript - 如何将参数传递给模态弹出窗口?

javascript - .单击使用 id 进行工作?

javascript - 错误: deleteItem function is not defined in my script

ruby-on-rails - 无法从 Rails API 获取 JSON 数据

javascript - Angular Material 日期选择器位置错误,Chrome 除外