我需要测试一个在浏览器中打开新选项卡的函数
openStatementsReport(contactIds) {
window.open(`a_url_${contactIds}`);
}
Run Code Online (Sandbox Code Playgroud)
我想模拟窗口的open函数,这样我就可以验证正确的URL是否传递给open函数.
使用Jest,我不知道如何模仿窗口.我尝试使用模拟函数设置window.open但这种方式不起作用.以下是测试用例
it('correct url is called', () => {
window.open = jest.fn();
statementService.openStatementsReport(111);
expect(window.open).toBeCalled();
});
Run Code Online (Sandbox Code Playgroud)
但它给了我错误
expect(jest.fn())[.not].toBeCalled()
jest.fn() value must be a mock function or spy.
Received:
function: [Function anonymous]
Run Code Online (Sandbox Code Playgroud)
我应该怎么做测试用例?任何建议或提示表示赞赏
如何使用Jest测试输出是随机的函数?像这样:
import cuid from 'cuid';
const functionToTest = (value) => ({
[cuid()]: {
a: Math.random(),
b: new Date().toString(),
c: value,
}
});
Run Code Online (Sandbox Code Playgroud)
所以输出functionToTest('Some predictable value')将是这样的:
{
'cixrchnp60000vhidc9qvd10p': {
a: 0.08715126430943698,
b: 'Tue Jan 10 2017 15:20:58 GMT+0200 (EET)',
c: 'Some predictable value'
},
}
Run Code Online (Sandbox Code Playgroud) 目前,我正在为我的项目实施单元测试,并且其中包含一个文件window.location.href。
我想对此进行测试,这是我的示例代码:
it("method A should work correctly", () => {
const url = "http://dummy.com";
Object.defineProperty(window.location, "href", {
value: url,
writable: true
});
const data = {
id: "123",
name: null
};
window.location.href = url;
wrapper.vm.methodA(data);
expect(window.location.href).toEqual(url);
});
Run Code Online (Sandbox Code Playgroud)
但是我得到这个错误:
TypeError: Cannot redefine property: href
at Function.defineProperty (<anonymous>)
Run Code Online (Sandbox Code Playgroud)
我尝试了一些解决方案,但没有解决。我需要一些提示来帮助我摆脱困境。请帮助。
我有一个在节点和浏览器上运行的函数,我想用jest测试:
const myFn = () => {
if(typeof window !== 'object'){
return 1;
}
return 2;
}
Run Code Online (Sandbox Code Playgroud)
我如何能够将全局窗口对象设置为undefined,以测试节点分支,并返回1.
例如
test('myTest', ()=> {
global.window = undefined;
expect(myFn()).toEqual(1); // result: 2
});
Run Code Online (Sandbox Code Playgroud)
我试过这里的建议没有成功: 在Jest中模拟全局变量
问题是在开始测试之前,我需要做一些准备工作。我有几个测试文件,每个文件都需要在每个测试文件之前打开Rabbit连接,并在每个文件中的所有测试结束后关闭它。问题是,我必须在测试文件中复制代码以打开和关闭连接。如何在一个文件中处理连接。我正在使用TypeScript,因此在这种情况下,诸如jest-environment-node,jest-set之类的几种解决方案都无济于事。另外,我还可以使用以下安装文件解决此问题:
"setupFiles": [
"./src/inttests/partial/mocks/setup.ts"
],
Run Code Online (Sandbox Code Playgroud)
然后在安装文件中写类似:
let channel: PubChannel;
beforeAll(() => {
channel = new PubChannel('amqp://localhost', true);
exports.ss = new SystemService(channel); // or using globals but it doesn't actually work in both cases.
});
afterAll(async () => {
await channel.closeConnection();
}
);
Run Code Online (Sandbox Code Playgroud)
事实是,我需要在测试中使用ss变量才能调用某些函数。但是我不知道如何使它们从setupt.ts文件中可用,因为我不能使用导出斜线词,因为该值已在beforeAll范围内进行了修改。有没有机会解决这个荒谬的问题?
我有一个服务MyService,其功能使用ga()要测试的事件跟踪调用:
angular.module('myModule').factory('MyService', [function() {
var myFunc = function() {
ga('send', 'event', 'bla');
// do some stuff
}
return {
myFunc: myFunc
}
]);
Run Code Online (Sandbox Code Playgroud)
我的规格文件如下所示:
describe('The MyService', function () {
var MyService,
ga;
beforeEach(function () {
module('myModule');
ga = function() {};
});
beforeEach(inject(function (_MyService_) {
MyService = _MyService_;
}));
it('should do some stuff', function () {
MyService.myFunc();
// testing function
});
});
Run Code Online (Sandbox Code Playgroud)
运行测试始终可以为我提供:
ReferenceError:找不到变量:ga
unit-testing google-analytics google-analytics-api jasmine angularjs
javascript ×4
jestjs ×4
jasmine ×2
unit-testing ×2
angularjs ×1
mocking ×1
reactjs ×1
typescript ×1
vue.js ×1
vuejs2 ×1