单元测试:在模拟promise返回来测试我的emit时遇到困难
Unit test: Having trouble mocking a promise return to test my emit
单元测试:在mock promise return来测试emit
时遇到问题我想看看emit是否在promise回调中被调用。
这是我正在测试的代码:
"use strict";
angular.module("app.directives")
.directive("modalFilter", ["filterValidationService", function(filterValidationService) {
return {
restrict: "E",
scope: {},
templateUrl: "templates/components/modal-filter.html",
link: function(scope) {
let defaultFilter = {"size": {"to": 0, "from": 0}};
scope.clearFilter = function() {
scope.filter = defaultFilter;
};
//New - requires unit test
scope.updateTable = function() {
const tab = "availabilities";
const isFilter = scope.filter === defaultFilter ? false : true;
filterValidationService.validateSize(scope.filter.size)
.then(filterObj => {
scope.$emit("filter:cardData", filterObj, tab, isFilter);
});
};
scope.clearFilter();
}
};
}]);
这是我的单元测试:
"use strict";
describe("modal filter component:", function () {
var element;
var scope;
var mockData = {"size": {"to": 0, "from": 0}};
var mockFilteredData = {"size": {"to": 900, "from": 100}};
var filterValidationService;
beforeEach(angular.mock.module("eg.insight.services"));
beforeEach(angular.mock.module("eg.insight.directives"));
beforeEach(inject(function ($compile, $injector, $q, $rootScope, filterValidationService) {
var deferred = $q.defer();
scope = $rootScope.$new();
scope.filter = mockData;
filterValidationService = filterValidationService;
element = "<modal-filter></modal-filter>";
element = $compile(element)(scope);
angular.element(document.body).append(element);
scope.$digest();
scope = element.isolateScope();
sinon.spy(scope, "$emit");
sinon.stub(filterValidationService, "validateSize").returns(deferred.promise);
}));
it("should emit for filtered data when updateTable is called", function () {
scope.updateTable();
expect(scope.$emit.calledWith("filter:cardData", mockData.size, "availabilities", false)).toEqual(true);
});
});
我使用的是带有jasmine单元测试和sinon的angular。
我得到的错误是:"Expected false to equal true"
我想可能是因为这里你返回了一个promise
sinon.stub(filterValidationService, "validateSize").returns(deferred.promise);
但是你从来没有解决承诺,所以.then()
从来没有被调用。
可以在变量中保留承诺,并在it()
方法的scope.UpdateTable()
之后解决它
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 我的单元测试选项是什么
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 我的职位回报太快了,如何做出承诺
- 我的jQuery插件参数没有正确启动,遇到了问题
- 如何识别我的网站中的慢速设备
- 如何将JSON数据导入我的ejs模板
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 知道为什么我的旋转木马不会自动更改图片吗
- 我的模板未被解析
- 无法将数据从firebase获取到我的html页面
- 角度图表;t显示在我的页面中
- 我的AngularJS表达式没有'不起作用
- 将电视直播频道从网站嵌入我的网站
- /undefined在我的404错误日志中多次出现
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- 在我的情况下,如何在指令中设置$emit
- 单元测试:在模拟promise返回来测试我的emit时遇到困难