$modal
。确切的错误是 `Expected spy open to have
期望和实际模式选项对象是相同的。到底是怎么回事?
(function () {
'use strict';
angular
.module('app')
.controller('W2History', W2History);
W2History.$inject = ['$scope', '$modal', 'w2Service'];
function W2History($scope, $modal, w2Service) {
/* jshint validthis:true */
var vm = this;
vm.showModal = showModal;
function showModal(employee) {
var modalInstance = $modal.open({
templateUrl: '/n/views/consent.html',
controller: 'W2ConsentModal as w2modal',
resolve: {
employee: function () {
return employee;
}
},
size: 'lg'
});
modalInstance.result.then(function (didConsent) {
// code omitted
});
}
}
})();
describe('W2History controller', function () {
var controller, scope, modal;
var fakeModal = {
result: {
then: function (confirmCallback, cancelCallback) {
//Store the callbacks for later when the user clicks on the OK or Cancel button of the dialog
this.confirmCallBack = confirmCallback;
this.cancelCallback = cancelCallback;
}
},
close: function (item) {
//The user clicked OK on the modal dialog, call the stored confirm callback with the selected item
this.result.confirmCallBack(item);
},
dismiss: function (type) {
//The user clicked cancel on the modal dialog, call the stored cancel callback
this.result.cancelCallback(type);
}
};
var modalOptions = {
templateUrl: '/n/views/consent.html',
controller: 'W2ConsentModal as w2modal',
resolve: {
employee: function () {
return employee;
}
},
size: 'lg'
};
beforeEach(function () {
module('app');
inject(function (_$controller_, _$rootScope_, _$modal_) {
scope = _$rootScope_.$new();
modal = _$modal_;
spyOn(modal, 'open').and.returnValue(fakeModal);
controller = _$controller_('W2History', {
$scope: scope,
$modal: modal,
w2Service: w2Srvc
});
});
});
it('Should correctly show the W2 consent modal', function () {
var employee = terminatedaccessMocks.getCurrentUserInfo();
controller.showModal(employee);
expect(modal.open).toHaveBeenCalledWith(modalOptions);
});
});
试试这个:
describe('W2History controller', function () {
var controller, scope, modal;
var fakeModal = {
result: {
then: function (confirmCallback, cancelCallback) {
//Store the callbacks for later when the user clicks on the OK or Cancel button of the dialog
this.confirmCallBack = confirmCallback;
this.cancelCallback = cancelCallback;
}
},
close: function (item) {
//The user clicked OK on the modal dialog, call the stored confirm callback with the selected item
this.result.confirmCallBack(item);
},
dismiss: function (type) {
//The user clicked cancel on the modal dialog, call the stored cancel callback
this.result.cancelCallback(type);
}
};
var modalOptions = {
templateUrl: '/n/views/consent.html',
controller: 'W2ConsentModal as w2modal',
resolve: {
employee: jasmine.any(Function)
},
size: 'lg'
};
var actualOptions;
beforeEach(function () {
module('plunker');
inject(function (_$controller_, _$rootScope_, _$modal_) {
scope = _$rootScope_.$new();
modal = _$modal_;
spyOn(modal, 'open').and.callFake(function(options){
actualOptions = options;
return fakeModal;
});
controller = _$controller_('W2History', {
$scope: scope,
$modal: modal
});
});
});
it('Should correctly show the W2 consent modal', function () {
var employee = { name : "test"};
controller.showModal(employee);
expect(modal.open).toHaveBeenCalledWith(modalOptions);
expect(actualOptions.resolve.employee()).toEqual(employee);
});
});
朋克
说明 :
我们不应该期望实际值resolve.employee
与假值相同,resolve.employee
因为它resolve.employee
是一个返回雇员的函数(在这种情况下,该雇员是在关闭中被捕获的)。函数可能相同,但
在运行时 返回的对象可能不同。
测试失败的原因是javascript比较函数的方式。看看这个小提琴。无论如何,我对此并不在乎,因为我们不应该期望
函数实现 。在这种情况下,我们关心的是resolve.employee
返回与传入的对象相同的对象:
expect(actualOptions.resolve.employee()).toEqual(employee);
因此,这里的解决方案是:我们期望除之外的所有东西resolve.employee
:
var modalOptions = {
templateUrl: '/n/views/consent.html',
controller: 'W2ConsentModal as w2modal',
resolve: {
employee: jasmine.any(Function) //don't care about the function as we check it separately.
},
size: 'lg'
};
expect(modal.open).toHaveBeenCalledWith(modalOptions);
resolve.employee
首先捕获它来单独检查:
var actualOptions;
spyOn(modal, 'open').and.callFake(function(options){
actualOptions = options; //capture the actual options
return fakeModal;
});
expect(actualOptions.resolve.employee()).toEqual(employee); //Check the returned employee is actually the one we pass in.
我正在尝试测试Angular 2中的双向绑定功能。我还阅读了一些其他答案,但我仍然无法通过测试。 更新输入字段时,我想运行一个测试,以确保 AppComponent 类上的 searchQuery 属性与输入字段的值相同。 如前所述,我已经阅读了其他一些答案,并且随着我的学习,还包括了其他代码段。那么目前可能不需要的是什么? 成分 单元测试 如果有更好的方法,我当然很乐意得到任何反馈。
问题内容: 我正在尝试测试角度服务,该服务通过使用茉莉花服务对DOM进行一些操作。假设它只是将一些指令附加到元素上。 这样的服务可能看起来像 我想这样测试 因此,问题是创建这种模拟的最佳方法是什么? 进行真正的测试会使我们在每次测试后清理时遇到很多麻烦,而且看起来并不可行。 我还尝试过在每次测试之前创建一个新的真实文档实例,但最终都失败了。 创建如下所示的对象并检查变量的工作原理,但看起来非常丑陋
问题内容: 我正在尝试使用Jasmine进行单元测试React Bootstrap模式对话框。但是它没有按预期工作。 这是使用最新版本的React,React Bootstrap,Jasmine的jsfiddle链接:http : //jsfiddle.net/30qmcLyf/3/ 测试失败: 第27-28行 39-40行 同样,第35-36行出了什么问题。如果我取消注释行,则会在注释中显示错误
Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。
英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其
我刚刚将我的项目从angular-cli beta.10升级到angular-cli@WebPack(beta.18),现在我的specs.ts都没有解析(找不到名称'description'等)。有关于如何为我的项目配置单元测试的信息吗?