gpt4 book ai didi

javascript - 无法访问 Jasmine 测试用例中的范围变量

转载 作者:行者123 更新时间:2023-12-02 15:34:27 24 4
gpt4 key购买 nike

我的模块中定义了一个 Controller ,如下所示,

myTestApp.controller("LoginController", function($scope,$http,$location) {

$scope.submitForm = function(){

var userEmail = $scope.user.email;
var userPassword = $scope.user.password;

$http({
url:'api/login/',
headers: {'Content-Type': 'application/json'},
method:'POST',
data:{
username:userEmail,
password:userPassword
}})
.success(function(data){
$scope.loginResult = data;
});
};
});

我正在尝试编写一个测试用例,用于使用 httpBackend 模拟 HTTP 调用。

这是我的 jasmine 测试代码:

 describe('make HTTP mock call', function() {

var scope, httpBackend, http, controller;

beforeEach(module('myTestApp'));

describe('with httpBackend', function() {

beforeEach(inject(function ($rootScope, $controller, $httpBackend, $http) {
scope = $rootScope.$new();
httpBackend = $httpBackend;
http = $http;
controller = $controller('LoginController', {$scope : scope} );
httpBackend.when("POST", "api/login/",{'username':'test@gmail.com', 'password':'test'}, function(headers) {
return {
'Content-Type': 'application/json',
};
}).respond(200);
}));

afterEach(inject(function ($httpBackend){
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
}));

it('to check if user is valid', inject(function ($http) {

var expectedResponse = { success: true };

httpBackend.expectPOST('api/login/', {
"username": "test@gmail.com",
"password": "test"
}, function(headers){
return headers['Content-Type'] === 'application/json';
}).respond(function(method, url, data, headers, params){
return [200, {}, {}];
});

//actual HTTP call
$http({
url:'api/login/',
headers: {'Content-Type': 'application/json'},
method:'POST',
data:{
username:"test@gmail.com",
password:"test"
}});

//flush response
httpBackend.flush();
expect(scope.loginResult).toEqual(expectedResponse);
}));
});

});

但是,当我运行测试用例时,出现以下错误

Expected undefined to equal Object({ success: true }).

我想将 HTTP 调用的响应数据与预期响应进行比较,如果两者相等,则测试应该通过。

但是,我无法从测试用例中访问 $scope 变量 loginResult。谁能告诉我我在这里做错了什么?

有人可以描述使用 Jasmine 模拟 HTTP 调用的最佳方法吗?

最佳答案

只有在调用 submitForm 函数时,您的登录数据才会真正被填充。因此,在测试中,请在执行 flush() 之前调用该函数。

更新:确保您已定义

$scope.user={email :'test@gmail.com,password:'test'} 

在测试的第一行(就在 it('to check if user is valid',ject(function ($http) {) 之后)

关于javascript - 无法访问 Jasmine 测试用例中的范围变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com